打赏

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

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

posted @ 2019-12-03 11:08  gyc567  阅读(242)  评论(0编辑  收藏  举报