[易学易懂系列|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
[易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]的更多相关文章
- [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]
[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]
[易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]
[易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]
[易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]
[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime]
[易学易懂系列|rustlang语言|零基础|快速入门|(5)] Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro]
[易学易懂系列|rustlang语言|零基础|快速入门|(22)|宏Macro] 实用知识 宏Macro 我们今天来讲讲Rust中强大的宏Macro. Rust的宏macro是实现元编程的强大工具. ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针]
[易学易懂系列|rustlang语言|零基础|快速入门|(21)|智能指针] 实用知识 智能指针 我们今天来讲讲Rust中的智能指针. 什么是指针? 在Rust,指针(普通指针),就是保存内存地址的值 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理]
[易学易懂系列|rustlang语言|零基础|快速入门|(20)|错误处理] 实用知识 错误处理 我们今天来讲讲Rust中的错误处理. 很多语言都有自己的错误处理方式,比如,java是异常处理机制. ...
随机推荐
- tomcat启动不了?
tomcat是用Java编写的,首先需要配置好jdk虚拟机, 要安装 JDK,请转至http://www.oracle.com/technetwork/java/javase/downloads/jd ...
- SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用
进入正题,准备我们的测试数据 1.我们要筛选的数据为去除 GX 列的重复项 并将所有数据展示出来,如图所示: ' 2.这种情况下我们是不可以使用DISTINCT来去重的,我们可以来尝试一下: 首先,单 ...
- URL库函数
1.urlopen from urllib import request resp=request urlopen('http://www.baidu.com') print(resp.read()) ...
- 华为HCNA乱学Round 7:VLAN间路由
- Flume概述
flume是分布式的,可靠的,用于从不同的来源有效收集 聚集 和 移动 大量的日志数据用以集中式的数据存储的系统. 是apache的一个顶级项目. 系统需求:jdk1.6以上,推荐java1.7
- hadoop3.0.0部署
配置前先查下JAVA_HOME的位置vim /etc/profile#set java environment JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1. ...
- [转] Python中的装饰器(decorator)
想理解Python的decorator首先要知道在Python中函数也是一个对象,所以你可以 将函数复制给变量 将函数当做参数 返回一个函数 函数在Python中和变量的用法一样也是一等公民,也就是高 ...
- Luogu P2569 [SCOI2010] 股票交易
此题链接到dp常见优化方法 开始的时候被纪念品误导,以为是多支股票,后来发现事情不妙: 这道题知道的是某一只股票的走势: \(Solution\): \(70pts\): 设\(f[i][j]\)表示 ...
- Django中ORM操作提升性能
提升orm操作性能注意的点 优化一:尽量不查对象,能用values就是用values 直接使用对象查询的结果是5条sql语句 def youhua(request): # 使用对象查 obj_list ...
- 分布式锁的几种实现方法:redis实现分布式锁
使用失效的方式实现分布式锁(推荐) import redis.clients.jedis.Jedis; /** * 使用redis实现分布式锁(推荐) * */ public class JedLoc ...