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

【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.kler.cn/a/500847.html

相关文章:

  • 嵌入式Linux之文件IO
  • Microsoft Sql Server 2019 数据类型
  • JavaScript 学习总结
  • Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)
  • Kali系统(Debian 10.3) 遇到的问题
  • CNN Test Data
  • Kafka 深度剖析
  • MySQL 17 章——触发器
  • CSS圆形序号简单案例
  • 云原生时代的IT运维:从工具到方法论的全面升级
  • Service Work离线体验与性能优化
  • 【开发环境搭建篇】Visual Studio 2022 安装和使用
  • Docker运行hello-world镜像失败或超时
  • netplan apply报错No module named ‘netifaces‘
  • 【力扣Hot100】哈希表
  • 第34天:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法
  • PHP cURL 函数初学者完全指南
  • 从取证视角看虚拟化——以 ESXi 为例
  • 软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
  • Vue 中,使用 v-for 和 v-if 在同一个元素上时,出现报错,怎么解决
  • 大语言模型训练的数据集从哪里来?
  • 在Node.js中借助腾讯云SDK调用混元大模型
  • Github 2025-01-10 Java开源项目日报Top8
  • Oracle 创建index时 自动收集index 统计信息 但partition index要特别注意
  • file与io流(2)
  • Linux下部署Redis(本地部署超详细)