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