mirror of
https://github.com/RustyCab/LearnRustEasy.git
synced 2026-02-04 02:33:24 +08:00
Create chapter_3_18_2.md
This commit is contained in:
113
src/chapter_3/chapter_3_18_2.md
Normal file
113
src/chapter_3/chapter_3_18_2.md
Normal 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
|
||||
```
|
||||
|
||||
执行结果如下图:
|
||||
|
||||

|
||||
|
||||
## 4. 过滤运行测试
|
||||
还可以指定部分测试的名称,任何名称匹配这个名称的测试会被运行。例如,因为上面的代码中,前两个测试的名称包含 add,则可以通过 cargo test add 来运行这两个测试:
|
||||
```
|
||||
cargo test add
|
||||
```
|
||||
|
||||
执行结果如下图:
|
||||
|
||||

|
||||
|
||||
## 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将不会执行该函数,执行结果如下:
|
||||
|
||||

|
||||
Reference in New Issue
Block a user