cargo test命令会在测试模式下编译代码并运行生成的测试二进制文件,传递参数给cargo test命令,可以改变测试的行为。一部分参数传递给cargo test,另一部分传递给测试二进制文件。前面的参数是传递给cargo test,后面的参数是传递给测试二进制文件。
并行或连续运行测试🔗
Rust默认在运行多个测试时会并行运行,但有些时候,例如往一个文件中写入数据,并行运行的测试可能互相干扰导致测试失败,一种解决方法是每一个测试都写不同的文件,另一解决方法是一次运行一个测试。
想要控制线程数量,可以传递--test-threads参数,如下:
cargo test -- --test-threads=1
这里指定程序不要使用并行机制。
显示函数输出🔗
默认情况下,测试通过时cargo test不会显示测试函数的输出,想要显示测试函数的输出,可以传递--show-output参数,如下:
cargo test -- --show-output通过指定名字来运行部分测试🔗
如果只希望运行相关代码有关的测试,可以通过向cargo test传递测试函数的名字来运行部分测试,如下:
pub fn add_two(a: usize) -> usize {
a + 2
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn add_two_and two() {
let result = add_two(2);
assert_eq!(result, 4);
}
#[test]
fn add_three_and_two() {
let result = add_two(3);
assert_eq!(5, result);
}
#[test]
fn one_hundred() {
let result = add_two(100);
assert_eq!(102, result);
}
}运行单个测试🔗
使用cargo test one_hundred只运行one_hundred这一个测试。
运行多个测试🔗
指定部分名称,则包含这部分名称的测试都会被运行。例如使用cargo test add会运行add_two_and_two和add_three_and_two这两个测试。
忽略非特别指定的测试🔗
使用ignore属性可以标记测试的时候排除的测试,如下:
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
#[test]
#[ignore]
fn expensive_test() {
}
}
在想要排除的#[test]之后增加#[ignore]行,这样使用cargo test运行测试,就会发现expensive_test这个测试没有被运行。
如果我们只希望运行被忽略的测试,可以使用cargo test -- --ignored命令。