[易学易懂系列|rustlang语言|零基础|快速入门|(15)]
实用知识
Unit Testing单元测试
我们知道,在现代软件开发的过程中,单元测试对软件的质量极及重要。
今天我们来看看Rust是怎么做单元测试的。
首先我们用cargo new 来创建一个工程。
1
2 1cargo new --vcs git --lib test-example
2
然后,我们会得到这样的目录结构:
1
2
3
4
5
6
7
8
9 1test-example
2├── Cargo.lock
3├── Cargo.toml
4├── src
5│ └── lib.rs
6└── target
7 └── debug
8 └── ...
9
然后我们在lib.rs文件中,写入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1fn greet() -> String {
2 "Hello, world!".to_string()
3}
4
5#[cfg(test)] // Only compiles when running tests
6mod tests {
7 use super::*; // Import root functions
8 #[test]
9 fn it_works() {
10 assert_eq!(2 + 2, 4);
11 }
12 #[test]
13 fn test_greet() {
14 assert_eq!("Hello, world!", greet());
15 }
16}
17
18
然后, 我们用cargo test 在这个工程根目录跑一下。
结果,应该是:
1
2
3
4
5
6 1running 2 tests
2test tests::it_works ... ok
3test tests::test_greet ... ok
4
5test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
6
我们发现,我们的测试方法与被测试的代码 ,是放在一起的,有没有可能把它们分开来写呢?
这样,也是符合我们的习惯。
可以的。
我们先把所以测试代码写到:tests.rs,代码如下 :
1
2
3
4
5
6
7
8
9
10
11 1use super::*; // Import root functions
2#[test]
3fn it_works() {
4 assert_eq!(2 + 2, 4);
5}
6#[test]
7fn test_greet() {
8 assert_eq!("Hello, world!", greet());
9}
10
11
然后lib.rs的代码,更新为如下:
1
2
3
4
5
6
7
8 1fn greet() -> String {
2 "Hello, world!".to_string()
3}
4
5#[cfg(test)] // Only compiles when running tests
6mod tests;
7
8
再用cargo test命令运行一下。
我们可以看到结果:
1
2
3
4 1running 2 tests
2test tests::test_greet ... ok
3test tests::it_works ... ok
4
以上,希望对你有用。
1
2 1如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust
2
参考:http://technosophos.com/2018/07/07/from-go-to-rust-testing.html