cargo test会在测试模式下编译代码,并运行生成的测试二进制文件。

通过命令行参数,我们可以:

  • 改变cargo test的默认行为。
  • 为生成的测试二进制文件指定参数。

在传递给cargo test的参数后使用--分隔符,后面的就是传递给测试二进制文件的参数。 例如:

  • cargo test --help:传递给cargo test
  • cargo test -- --help:传递给测试二进制文件。

显示函数输出

默认情况下,Rust的测试库会在测试通过时捕获所有被打印至标准输出的消息。也就是说,测试如果通过,那么println!等打印的信息就不会显示在标准输出上。只有测试不通过才会显示。

如果希望测试通过也能打印值,可以传入--nocapture标记,如

cargo test -- --nocapture

只运行部分特定名称的测试

cargo test传递测试名称来指定需要运行的测试。

创建三个测试:

fn add_two(a: i32) -> i32 {
	a + 2
}
 
#[cfg(test)]
mod tests {
	#[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));
	}
}

只运行one_hundred测试函数,那么cargo test one_hundred,运行以add开头的测试函数cargo test add

也可以指定模块名来运行特定模块内的所有测试

显式忽略某些测试

对于想要剔除的测试,可以在#[test]下方添加#[ignore]。例如

#[test]
#[ignore]
fn expensive_test() {
}

在默认cargo test的时候就会忽略掉这些测试,只有显式指定--ignore才会单独运行这些测试。cargo test -- --ignore

对于测试代价高的测试我们都可以使用#[ignore]进行标注。


tags: 测试