【Rust自学】11.9. 单元测试

devtools/2025/1/12 12:51:13/

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

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被它标注的条目只有在指定的配置选项下才被包含。

看个例子:

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允许测试私有函数,其他语言不一定。

看个例子:

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.ppmy.cn/devtools/149877.html

相关文章

Ruby语言的软件开发工具

Ruby语言的软件开发工具探索 Ruby语言以其简洁优雅的语法和强大的面向对象特性而受到广泛欢迎。作为一种动态、反射性强的编程语言,Ruby具有很高的开发效率,适用于各种类型的开发,从Web应用到命令行工具,都能得到很好的支持。在R…

网络安全漏洞学习与企业挖掘实战:从基础概念到操作步骤全解析

该文章是个人学习笔记,学习的相关视频是来自蚁景网安的百里老师的相关视频 内容简介 什么是网络安全技术中的漏洞学习黑客漏洞从哪里开始起步针对企业的漏洞挖掘应该如何去做漏洞挖掘的步骤和相关的概念收集企业信息的基本思路的和流程 1.什么是网络安全技术中的漏洞…

左神算法基础巩固--4

文章目录 图图的表示图的遍历图的宽度优先遍历图的深度优先遍历 解题 图 在面试中图的考察并不寻常,但并不是没有,所以我们也需要学习学习。 图的题目之所以会显得比较难其主要原因便是我们不知道如何正确表示一个图即用一个合适的数据结构将题目中出现…

STM32-DMA数据转运

注:DMA对应的库函数文件讲解 DMA_GetITStatus(uint32_t DMAy_IT) 是一个用于检查DMA(直接存储器访问)中断状态的库函数。它通常在使用STM32系列微控制器及其标准外设库时被调用。此函数的主要作用是返回指定DMA通道的特定中断标志的状态&…

某漫画网站JS逆向反混淆流程分析

文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…

纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)

1 引言 最近读一些Java Web开发类的书籍时,发现书中的连接数据库的过程缺少了一些关键性的过程,这对初学者非常不友好。为此,本文将给出详细的连接MySQL数据库的过程,并且是纯手工,不依赖于pom.xml和Web容器&#xff…

一分钟学会文心一言API如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号: 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口: 在百度智能云开放平台中,找到文心一言API的详情页,了解提供的API接口类型(如云端API、移动端API、离线…

自动化元素定位时,发现提示找不到元素,怎么处理?

你是否在自动化测试中遇到这样的问题:明明代码没有报错,定位方式也没错,但运行时总是提示“找不到元素”?别急,这种情况很常见,解决起来并不复杂。本文将为你拆解各种原因,并提供实用的解决方案…