Create chapter_3_18_2.md

This commit is contained in:
令狐一冲
2023-05-18 11:00:13 +08:00
committed by GitHub
parent f79938a8e8
commit 19a5a4a241

View File

@@ -0,0 +1,113 @@
# 3.18.2运行测试
上一节演示了如何编写测试对于运行测试则只提到了简单的命令cargo test。本节对执行测试进行详细介绍。
## 1. 并行或连续运行测试
当运行多个测试时Rust默认使用线程并行运行。如果不希望测试并行运行或者更加精确的控制线程的数量可以传递 --test-threads参数来控制示例如下
```
cargo test -- --test-threads=1 # 使用一个线程运行测试
```
## 2. 显示测试中的打印
有的时候,需要在运行测试时打印内容到标准输出,可以添加-- --nocapture或者-- --show-output例如有如下代码
```Rust
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);
println!("result = {:?}", result); // 打印到标准输出
assert_eq!(result, 4); // 用断言进行判断结果
}
}
```
要在运行测试时显示12行的打印可以运行如下命令
```
cargo test -- --nocapture
```
或者
```
cargo test -- --show-output
```
## 3. 运行单个测试
运行测试时,可以通过指定测试函数的名字来运行某个特定的测试函数。例如有如下测试代码:
```Rust
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));
}
}
```
通过指定函数名运行特定的测试函数下面的命令只会运行函数add_two_and_two
```
cargo test add_two_and_two
```
执行结果如下图:
![注释](../../assets/59.png)
## 4. 过滤运行测试
还可以指定部分测试的名称,任何名称匹配这个名称的测试会被运行。例如,因为上面的代码中,前两个测试的名称包含 add则可以通过 cargo test add 来运行这两个测试:
```
cargo test add
```
执行结果如下图:
![注释](../../assets/60.png)
## 5. 忽略某个测试
有时候运行cargo test时想忽略其中的某个测试此时可以通过使用ignore属性来标记该测试来排除它。例如有如下测试代码
```Rust
pub fn add_two(a: i32) -> i32 {
a + 2
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[ignore] //通过添加ignore属性来排除改测试运行cargo 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));
}
}
```
上面的代码中将add_two_and_two用#[ignore]忽略运行cargo test将不会执行该函数执行结果如下
![注释](../../assets/61.png)