[易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]

释放双眼,带上耳机,听听看~!

[易学易懂系列|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

https://learning-rust.github.io/docs/d3.modules.html

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ lambda表达式

2022-1-11 12:36:11

安全技术

SpringJUnit4ClassRunner的使用

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索