当前位置: 首页 > news >正文

【Rust自学】11.9. 单元测试

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
请添加图片描述

11.9.1. 测试的分类

Rust把测试分为两类,一个是单元测试,一个是集成测试

  • 单元测试比较小也比较专注,每次只对一个模块进行隔离的测试,还可以测试私有的(private)接口。
  • 集成测试完全位于代码库之外,它和其他外部代码一样地使用你的代码,集成测试只能访问公共的(public)接口,并且在每个测试中可能使用到多个模块。

11.9.2. #[cfg(test)]标注

单元测试的目的在于将一小段代码隔离出来从而迅速地确定这段代码的功能是否符合预期,而且我们通常把单元测试和被测试的代码都放在src目录下的同一个文件中。

同时,约定俗成的,每个源代码文件都要建立一个test模块来放这些函数,并且使用#[cfg(test)]来对测试模块进行标注。使用它进行标注的模块只有在运行cargo test的时候会被编译和执行,在cargo build时则不会。

以上是单元测试的规则。集成测试在不同的目录里,不需要#[cfg(test)]标注。

#[cfg(test)]中的cfg是英文configuration(配置)这个词的缩写,使用它就相当于告诉Rust被它标注的条目只有在指定的配置选项下才被包含。

看个例子:

pub fn add(left: usize, right: usize) -> usize {left + right
}#[cfg(test)]
mod tests {use super::*;#[test]fn it_works() {let result = add(2, 2);assert_eq!(result, 4);}
}

#[cfg(test)]的配置选项就是test,test这个配置选项就是由Rust提供用来编译和运行测试的,只有在运行cargo test的时候会编译和执行#[cfg(test)]下的条目。

11.9.3. 测试私有函数

Rust允许测试私有函数,其他语言不一定。

看个例子:

pub fn add_two(a: usize) -> usize {internal_adder(a, 2)
}fn internal_adder(left: usize, right: usize) -> usize {left + right
}#[cfg(test)]
mod tests {use super::*;#[test]fn internal() {let result = internal_adder(2, 2);assert_eq!(result, 4);}
}

即使internal_adder没有用pub关键字来声明为公共,在测试模块中依然可以被调用。


http://www.mrgr.cn/news/83507.html

相关文章:

  • flowable工作流引擎
  • django基于Python的电影推荐系统
  • 点赞系统设计(微服务)
  • VSCode 使用鼠标滚轮控制字体
  • seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢
  • TypeScript语言的并发编程
  • qt QPainter setViewport setWindow viewport window
  • 如何在Jupyter中快速切换Anaconda里不同的虚拟环境
  • 【数通】MPLS
  • 【Bluedroid】HFP连接流程源码分析(一)
  • Centos9-SSH免密登录配置-修改22端口-关闭密码登录-提高安全性
  • 第三十六章 Spring之假如让你来写MVC——拦截器篇
  • 大数据环境搭建进度
  • qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效 原因
  • 大数据运维管理体系的搭建
  • ZYNQ初识10(zynq_7010)UART通信实验
  • [笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server
  • TensorFlow DAY3: 高阶 API(Keras,Estimator)
  • windows下编写的shell脚本在Linux下执行有问题解决方法
  • centos 搭建nginx+配置域名+windows访问
  • 数论问题42
  • Android Framework WMS全面概述和知识要点
  • 浅谈云计算06 | 云管理系统架构
  • ROS Action接口
  • Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
  • 三台Centos7.9中Docker部署Redis集群