Rust中的单元测试

概述

Rust内置了单元测试的支持,这点和Golang一样,非常的棒,我超级喜欢单元测试!!!

本节课的代码还是基于之前的求公约数的案例。

之前的完整代码如下:

rust 复制代码
fn gcd(mut n: u64, mut m: u64) -> u64 {
    assert!(n != 0 && m != 0);
    while m != 0 {
        if m < n {
            let t = m;
            m = n;
            n = t;
        }
        m = m % n;
    }
    n
}

fn main() {
    let r: u64 = gcd(88, 99);
    println!("{}", r);
}

添加单元测试代码

基于之前的代码,我们可以添加如下测试代码:

rust 复制代码
#[test]
fn test_gcd(){
	assert_eq!(gcd(14, 15), 1);
	assert_eq!(gcd(2*3*5*11*17, 3*7*11*13*19), 3*11);
}

#[test]是一个标记,将test_gcd标记为一个测试函数,在正常编译的时候会跳过它。但是如果使用 cargo test命令运行程序,则会自动包含并调用它。

在Rust中,因为这种机制的存在,我们可以将测试代码紧挨着函数编写,而不必单独为测试代码开辟一个新的文件。

实战:单元测试

创建项目:

bash 复制代码
cargo new hello

修改代码:

bash 复制代码
cd hello
vim src/main.rs

完整代码如下:

rust 复制代码
fn gcd(mut n: u64, mut m: u64) -> u64 {
    assert!(n != 0 && m != 0);
    while m != 0 {
        if m < n {
            let t = m;
            m = n;
            n = t;
        }
        m %= n;
    }
    n
}

#[test]
fn test_gcd(){
    assert_eq!(gcd(14, 15), 1);
    assert_eq!(gcd(2*3*5*11*17, 3*7*11*13*19), 3*11);
}

fn main() {
    let r: u64 = gcd(88, 99);
    println!("{}", r);
}

执行测试:

bash 复制代码
zhangdapeng@zhangdapeng:~/code/hello$ cargo test
   Compiling c10_func v0.1.0 (/home/zhangdapeng/code/hello)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.34s
     Running unittests src/main.rs (target/debug/deps/c10_func-7066c0fd0fc42bb9)

running 1 test
test test_gcd ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

运行代码:

bash 复制代码
zhangdapeng@zhangdapeng:~/code/hello$ cargo test
   Compiling c10_func v0.1.0 (/home/zhangdapeng/code/hello)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.34s
     Running unittests src/main.rs (target/debug/deps/c10_func-7066c0fd0fc42bb9)

running 1 test
test test_gcd ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

代码清理:

bash 复制代码
zhangdapeng@zhangdapeng:~/code/hello$ cargo clean
     Removed 52 files, 14.0MiB total
相关推荐
布列瑟农的星空15 小时前
前端都能看懂的Rust入门教程(三)——控制流语句
前端·后端·rust
devmoon19 小时前
Polkadot SDK Pallet 单元测试完整指南:从基础到实战
单元测试·web3·区块链·模块测试·polkadot
devmoon21 小时前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot
Andrew_Ryan21 小时前
用 Rust 构建高性能 LiteLLM 客户端:支持流式与非流式调用
rust
魔力军1 天前
Rust学习Day3: 3个小demo实现
java·学习·rust
szhf781 天前
SpringBoot Test详解
spring boot·后端·log4j
Smart-Space1 天前
htmlbuilder - rust灵活构建html
rust·html
魔力军1 天前
Rust学习Day2: 变量与可变性、数据类型和函数和控制流
开发语言·学习·rust
暴躁小师兄数据学院2 天前
【WEB3.0零基础转行笔记】Rust编程篇-第一讲:课程简介
rust·web3·区块链·智能合约
软件检测小牛玛2 天前
软件功能测试找谁做?第三方软件检测机构推荐:中承信安
功能测试·单元测试·软件测试报告·软件功能测试·第三方软件测评