约 400 字 预计阅读 1 分钟
如何编写测试
- 需要标记注解
#[test]
assert_eq
宏 和 assert_ne
宏 测试相等
assert
宏自定义断言
should_panic
注解预测panic
- 还可以通过Result<T, E> 方式测试
控制测试如何运行
- 默认并行测试,可以通过
--test-threads=1
指定但县城测试
- 显示函数输出
--show-output
- 可以指定运行部分测试
[ignore]
注解忽略测试
测试的组织
单元测试
- 单元测试,在模块中,指定
[cfg(test)]
注解,可以在编译时忽略test包,加快变异,减少编译结果大小
- 通过子模块引用父模块的方法,测试私有函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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));
}
}
|
集成测试
- 在src 同级创建
tests
目录,目录结构如下:
1
2
3
4
5
6
7
|
adder
├── Cargo.lock
├── Cargo.toml
├── src
│ └── lib.rs
└── tests
└── integration_test.rs
|
- 可以支持多模块