--
分隔;cargo test -- --help
会提示分隔符--
之后使用的参数;设置测试程序并行执行数
cargo test -- --test-threads=1
不只显示测试程序通过与否,还需要显示println!
的输出;
cargo test -- --show-output
pub fn add_two(a: i32) -> i32 {
a + 2
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn add_two_and_two() {
assert_eq!(4, add_two(2));
}
#[test]
fn add_three_and_two() {
assert_eq!(5, add_two(3));
}
#[test]
fn one_hundred() {
assert_eq!(102, add_two(100));
}
}
直接在cargo test后面加被#[test]
标记的函数名称即可;
add_
名称的测试用例;add_three_and_two
测试用例;#[ignore]
标记运行cargo test
运行时忽略的测试用例例如为add_three_and_two添加#[ignore]属性
cargo test -- --ignored
测试主要分为单元测试(unit tests)与 集成测试(integration tests)
pub fn add_two(a: i32) -> i32 {
internal_adder(a, 2)
}
fn internal_adder(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn internal() {
assert_eq!(4, internal_adder(2, 2));
}
}
cargo test
的运行;#cfg(test)
标注模块;#cfg(test)
的模块只有在cargo test
时才会编译并执行,这样就减小了二进制包的体积;cargo test
时编译这个目录中的文件;tests
目录下的任何rs文件中的任何代码标注#[cfg(test)]
创建集成测试用例: tests/integration_test.rs
#[test]
fn it_adds_two() {
assert_eq!(4, adder::add_two(2));
}
addr::
引入要测试的模块;addr
就是创建cargo项目时指定的名字;cargo test --test integration_test
测试integration_test.rs文件下的所有测试用例;假设
setup
函数需要被多个测试文件的测试函数调用,参考以下步骤
tests/common.rs
并写入代码pub fn setup() {
// 编写特定库测试所需的代码
}
此时运行cargo test
会看到输出
cargo test
就不出出现上面的情况了;tests 目录中的子目录不会被作为单独的 crate 编译或作为一个测试结果部分出现在测试输出中。
mod.rs
中的函数;mod common;
#[test]
fn it_adds_two() {
common::setup();
assert_eq!(4, adder::add_two(2));
}