step_rust/lib.rs
1//! # 外层注释
2//! 通常用于描述 crate 以及模块的特性.
3
4// cargo test 命令,执行所有测试
5// 下面是打印信息
6// 运行了一个测试
7//running 1 test
8// 测试函数的名字
9// test tests::it_works ... ok
10// 通过1个,失败0个,被忽视0个,性能测试0个,过滤的测试0个
11// test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
12//
13// Running unittests src/main.rs (target/debug/deps/step_rust-591d145e20300c2a)
14//
15// running 0 tests
16//
17// test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
18// 文档测试中的测试,rust可以编译出现在文档中的代码,来保证文档代码和实际代码一致。
19// Doc-tests step_rust
20//
21// running 0 tests
22//
23// test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
24mod closure;
25mod iterator;
26
27/// 这是文档注释
28/// # Examples
29/// ```
30/// let arg = 5;
31/// let answer = step_rust::add_one(arg);
32///
33/// assert_eq!(6,answer)
34/// ```
35
36pub fn add_two(x: i32) -> i32 {
37 x + 2
38}
39// 这是单元测试
40#[cfg(test)]
41mod tests {
42 use crate::iterator::{iterator31, iterator32, iterator4};
43
44 // 加了 #[test]就是测试函数,也可以不加
45 #[test]
46 fn it_works() {
47 let result = 2 + 2;
48 // 断言 assert!(true);assert_eq!();assert_ne();
49 // eq,nq失败的话,会打印值的信息。
50 assert_eq!(result, 4);
51 // assert!(false, "这是添加的自定义的错误信息,失败的话会打印出来");
52 }
53
54 // 测试发生 panic ,则失败
55 #[test]
56 // 加上这个参数,执行时会忽略这个测试,
57 // 如果想执行这个测试,则 cargo test -- --ignored
58 #[ignore]
59 fn another() {
60 panic!("Make this test fail")
61 }
62
63 // 测试发生panic ,则成功
64 #[test]
65 // 只有发生panic,这个测试才会通过。
66 // 如果加了expected信息,那么发生expected信息必须包含panic的信息。
67 #[should_panic(expected = "期待的错误信息")]
68 fn another2() {
69 panic!("期待的错误信息")
70 }
71
72 // 通过Result来判断是否成功
73 #[test]
74 // 返回 OK成功,返回Err失败。
75 fn t_result() -> Result<(), String> {
76 if 5 > 4 {
77 Ok(())
78 } else {
79 Err(String::from("测试失败"))
80 }
81 }
82
83 #[test]
84 fn t_iterator() {
85 iterator31();
86 iterator32();
87 iterator4();
88 }
89}
90
91
92// 测试命令:
93// 1. 并行,并发测试:测试默认是并行的,但是可以设置线程的数量,这个参数是传递给二进制文件的
94// cargo test -- --test-threads=1
95// 2. 显示测试打印内容:在成功的测试中也看到打印的内容
96// cargo test -- --show-output
97// 3. 单个测试:指定只运行单个测试
98// cargo test 测试函数名
99// 4. 多个测试:匹配多个测试运行,指定测试函数名的一部分,或者模块名
100// cargo test 函数名一部分,或者模块名字
101// 5. 忽略测试:当需要忽略耗时,或者没必要的测试时。在函数上加上#[ignore]
102// 当我们需要执行忽略的测试时,运行以下命令
103// cargo test -- --ignored