--分隔;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));
}
