【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.mzph.cn/diannao/66990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆: queue[n] 的两个子级是 queue[2*n1] 和 queue[2*(n1)]。 注:左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测

回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测 目录 回归预测 | MATLAB实RVM-Adaboost相关向量机集成学习多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务,存储非结构化数据,兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

MySQL批量修改数据表编码及字符集为utf8mb4

​​​​​​MySQL批量修改数据表编码及字符集为utf8mb4 utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 更改数据库…

Edge浏览器网页设置深色模式/暗模式

文章目录 需求分析1. 浏览器中的设置——外观——深色。2. 在Edge浏览器的地址栏如下网址:edge://flags/,直接搜索Dark则有内容弹出,将Default更改为Enable即可设置成功。3. 成果 需求 长期对着电脑屏幕,白色实在太刺眼&#xff…

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…

基于FPGA的多功能数字钟设计

基于FPGA的多功能数字钟设计 前言基础知识按键数码管 系统概述按键使用说明模块描述模块设计button_debouncebutton_controllerclock_controllerdigital_tube 整体资源用量测试视频 前言 本工程主要是数码管、按键、LED的应用开发。 注:本工程所有IP均使用源码开发…

利用开源AI智能名片2+1链动模式S2B2C商城小程序拓展社交电商的深度实践探索

摘要:在数字化浪潮席卷全球的今天,社交电商作为一种新兴的商业模式,正以前所未有的速度改变着消费者的购物习惯与商家的营销策略。本文深入探讨了开源AI智能名片21链动模式S2B2C商城小程序在社交电商领域的应用,通过分析其核心机制…

【优选算法篇】:模拟算法的力量--解决复杂问题的新视角

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:优选算法篇–CSDN博客 文章目录 一.模拟算法二.例题1.替换所有的问号2.提莫攻击3.外观数列4…

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

蓝桥杯备考:数据结构之栈 和 stack

目录 栈的概念以及栈的实现 STL 的stack 栈和stack的算法题 栈的模板题 栈的算法题之有效的括号 验证栈序列 后缀表达式 括号匹配 栈的概念以及栈的实现 栈是一种只允许在一端进行插入和删除的线性表 空栈:没有任何元素 入栈:插入元素消息 出…

C++中的条件变量(condition_variable)详解:小白版

在编程中,我们经常需要处理多个任务,这些任务可能需要同时运行,也可能需要按照一定的顺序运行。这就涉及到了线程的概念。线程就像是一个小程序,它可以在程序中独立运行,而且可以和其他线程并行执行。 但是&#xff0…

【python】OpenCV—Local Translation Warps

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 利用液化效果实现瘦脸美颜 交互式的液化效果原理来自 Gustafsson A. Interactive image warping[D]. , 1993. 2、原理分析 上面描述很清晰了,鼠标初始在 C,也即…

STM32标准库学习笔记(十)SPI

前言 学习永无止境!本篇是嵌入式开发之片上外设SPI,了解基本硬件原理以及通信协议。 注:本文章为学习笔记,部分图片与文字来源于网络/江协科技课程/手册,如侵权请联系!谢谢! 一、SPI通信概述 1.…

从github上,下载的android项目,从0-1进行编译运行-踩坑精力,如何进行部署

因为国内的网络原因,一直在anroidstudio开发的问题上,是个每个开发者都会踩坑 一直以为是自己的原因,其实很多都是国内网络的原因,今天就从一个开发者的视角 把从github上一个陌生的项目,如何通过本地就行运行的 首先…

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS(Domain Name System)是互联网的基础技术之一,它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址,使得用户可以通过简单易记的域名来访…

使用Dify创建个问卷调查的工作流

为啥要使用Dify创建工作流呢?一个基于流程的智能体的实现,特别是基于业务的实现,使用Dify去实现时,通常都是一个对话工作流,当设计到相对复杂一些的流程时,如果将所有逻辑都放在对话工作流中去实现&#xf…

toRef 和 toRefs 详解及应用

在 Vue 3 中,toRef 和 toRefs 是两个用于创建响应式引用的工具,主要用于组合式 API(Composition API)的场景中 1. toRef 定义 toRef 将某个对象的某个属性包装成一个响应式引用。这样可以直接对该引用进行操作,而不需…

八 rk3568 android11 AP6256 蓝牙调试

一 经典蓝牙 经典蓝牙默认可以工作, 验证可以连接 蓝牙鼠标,键盘, 连接手机等等, 在 系统设置里打开蓝牙 ,扫描设备,配对连接即可。 注: 连接 ANDROID 手机的坑 1 手机连接之后空闲状态会断开 ,变成 配对的设备不是已连接,是正常,使用时又会自动 连接 2 手机传…

解读若依微服务架构图:架构总览、核心模块解析、消息与任务处理、数据存储与缓存、监控与日志

文章目录 1. 引言2. 架构总览3. 核心模块解析3.1 服务注册与配置中心Nacos:微服务的中枢 3.2 网关层ruoyi-gateway:服务的统一入口 3.3 核心业务服务3.4 认证服务ruoyi-auth:认证与授权的守护者 3.5 异构服务整合Sidecar:连接异构…