zoukankan      html  css  js  c++  java
  • [易学易懂系列|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

  • 相关阅读:
    MySQL —— 程序连接时的驱动名称和URL
    这该称作什么效应?
    Java 基础 面向对象之关键字内部类代码块修饰符
    Java 基础 面向对象之构造方法和关键字
    Java 基础 接口和多态
    Java 基础 面向对象和抽象类
    Java 基础 引用数据类型 ArrayList集合
    Java 基础 方法
    Java 基础 引用数据类型 和 流程控制
    Mongodb 基础 复制集原理和搭建
  • 原文地址:https://www.cnblogs.com/gyc567/p/11975622.html
Copyright © 2011-2022 走看看