[易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]
[易学易懂系列|rustlang语言|零基础|快速入门|(15)]
实用知识
Unit Testing单元测试
我们知道,在现代软件开发的过程中,单元测试对软件的质量极及重要。
今天我们来看看Rust是怎么做单元测试的。
首先我们用cargo new 来创建一个工程。
cargo new --vcs git --lib test-example
然后,我们会得到这样的目录结构:
test-example
├── Cargo.lock
├── Cargo.toml
├── src
│ └── lib.rs
└── target
└── debug
└── ...
然后我们在lib.rs文件中,写入以下代码:
fn greet() -> String {
"Hello, world!".to_string()
}
#[cfg(test)] // Only compiles when running tests
mod tests {
use super::*; // Import root functions
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
#[test]
fn test_greet() {
assert_eq!("Hello, world!", greet());
}
}
然后, 我们用cargo test 在这个工程根目录跑一下。
结果,应该是:
running 2 tests
test tests::it_works ... ok
test tests::test_greet ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
我们发现,我们的测试方法与被测试的代码 ,是放在一起的,有没有可能把它们分开来写呢?
这样,也是符合我们的习惯。
可以的。
我们先把所以测试代码写到:tests.rs,代码如下 :
use super::*; // Import root functions
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
#[test]
fn test_greet() {
assert_eq!("Hello, world!", greet());
}
然后lib.rs的代码,更新为如下:
fn greet() -> String {
"Hello, world!".to_string()
}
#[cfg(test)] // Only compiles when running tests
mod tests;
再用cargo test命令运行一下。
我们可以看到结果:
running 2 tests
test tests::test_greet ... ok
test tests::it_works ... ok
以上,希望对你有用。
如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust
参考:http://technosophos.com/2018/07/07/from-go-to-rust-testing.html
本人精通java高并发,DDD,微服务等技术实践,专注java,rust技术栈。 本人姓名郭莹城,坐标深圳,前IBM架构师、咨询师、敏捷开发技术教练,前IBM区块链研究小组成员、十多年架构设计工作经验,《区块链核心技术与应用》作者之一, 现聚焦于:区块链创投与交易所资源对接和技术咨询。 工作微信&QQ:360369487,区块链创投与交易所资源对接,加我注明:博客园+对接,技术咨询和顾问,加我注明:博客园+顾问。想学习golang和rust的同学,也可以加我微信,备注:博客园+golang或博客园+rust,谢谢!