【Rust】12. 自动化测试

news2025/2/22 14:08:51

12.1 编写测试

12.1.1 测试函数

  • 测试函数:在一个函数前加上一行 #[test] 注解将普通函数变成测试函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.1.2 assert! 宏

在这里插入图片描述
在这里插入图片描述

12.1.3 assert_eq! 与 assert_ne!

  • assert_eq!(left, right)assert_eq!(left, right) 在失败时会返回 leftright 两个值,比 assert!(xxx) 传递的信息更完善
  • 使用 assert_eq!assert_eq! 宏的值必须实现 PartialEq(用于断言两个值是否相等)与 Debug (在断言失败时打印他们的值)这两个派生 trait
  • 对于自定义的结构体与枚举,通常可以添加 #[derive(PartialEq, Debug)] 注解,来使用 assert_eq!assert_eq!

在这里插入图片描述
在这里插入图片描述

12.1.4 在断言中自定义失败信息

  • assert!assert_eq!assert_ne! 宏中,除了必需参数外,后面所有的参数都会传递给 format! 宏,作为失败时的输出进行打印

在这里插入图片描述
在这里插入图片描述

12.1.5 使用 should_panic 检查 panic

  • should_panic:在函数中的代码 panic 时会通过,而在其中的代码没有 panic 时失败
  • should_panic 属性有一个可选的 expected 参数:测试工具会确保错误信息中包含其提供的文本#[should_panic(expected = "Some text for debug...")]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.1.6 使用 Result<T, E> 编写测试

  • 使用 Result<T, E> 编写测试,在通过时返回 Ok 成员,在失败时返回 Err 成员
  • 不能对这些使用 Result<T, E> 的测试使用 #[should_panic] 注解
  • 为了断言一个操作返回 Err 成员,不要使用对 Result<T, E> 值使用问号表达式(?),而是使用 assert!(value.is_err())

在这里插入图片描述

12.2 控制测试如何运行

12.2.1 命令行参数分别传递

  • cargo test --help
  • cargo test -- --help

在这里插入图片描述

12.2.2 并行或连续的运行测试

  • $ cargo test -- --test-threads=1

在这里插入图片描述

12.2.3 显示函数输出

  • $ cargo test -- --show-output

在这里插入图片描述
在这里插入图片描述

12.2.4 运行指定的一部分测试(一):运行单个测试

  • cargo test xxx_fn:指定 xxx_fn 方法运行;
  • 注意:不能指定多个测试名称,只有传递给 cargo test 的第一个值才会被使用

在这里插入图片描述

在这里插入图片描述

12.2.5 运行指定的一部分测试(二):运行多个测试

  • cargo test xxx:指定所有带有 xxx 方法运行
  • 此外,也可以通过指定模块名来运行一个模块中的所有测试

在这里插入图片描述

12.2.6 忽略某些测试

  • 若不想执行某个测试,则在前面加上一行 #[ignore] 来忽略此测试
  • cargo test -- --ignored:只运行被忽略的测试
  • cargo test -- --include-ignored:运行全部测试(不管是否存在忽略的测试)

在这里插入图片描述
在这里插入图片描述

12.3 测试的组织结构

在这里插入图片描述

12.3.1 单元测试

  • 单元测试与他们要测试的代码共同存放在位于 src 目录下相同的文件中,具体规范为在每个文件中创建包含测试函数的 mod tests 模块,并且使用 #[cfg(test)] 注解来标注模块

在这里插入图片描述
在这里插入图片描述

12.3.2 集成测试(一):tests 目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.3.3 集成测试(二):子模块

  • tests 目录中的子目录不会被作为单独的 crate 编译或作为一个测试结果部分出现在测试输出中(即将公共部分放在一个子文件夹中)

在这里插入图片描述
在这里插入图片描述

12.3.4 集成测试(三):二进制 crate

在这里插入图片描述

12.4 小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190093.html

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

相关文章

Python学习-----起步1

目录 Python的下载&#xff08;解释器&#xff09; IDLE进入Python解释器 交互模式 脚本模式 注释 单行注释&#xff1a; 多行注释 Python的下载&#xff08;解释器&#xff09; 百度网盘链接&#xff1a; https://pan.baidu.com/s/1WEmOAGGHtHc1fxZzNGKu6A?pwd5356 …

web3小白入门:区块链的了解

记录web3学习的过程&#xff0c;从小白开始所有的web3相关的学习内容都会更新在github&#xff0c;github地址这篇文章主要说明区块链的一些概念为什么要了解区块链&#xff1f;Web3 是以区块链技术为核心,构建新一代的去中心化互联网组件,再基于它们来构建我们想要提供的服务、…

HTTP状态码301和302区别

Http 状态码 301 和 302 定义&#xff1a; 1、什么时候使用301&#xff1f; 你将永久更改网页的 URL时。你将永久迁移到新域名时。当你从 HTTP 切换到 HTTPS 时。你希望修复非 www / www 重复内容问题时。永久合并两个或多个页面或网站时。你将永久更改网站的 URL 结构时。 …

万字详解递归与递推

秋名山码民的主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f64f;作者水平有限&#xff0c;如发现错误&#xff0c;还请私信或者评论区留言&#xff01; &#x1f44d;目录前言递归斐波那契数列问题的递归爬楼梯问题力扣递归实现…

js 点击图片实现查看大图

js 点击图片实现查看大图 点击图片放大缩小&#xff08;遮罩&#xff09; 截图&#xff1a;点击放大&#xff0c;并显示ico放大镜 代码如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>点击图片放大缩…

buu 浪里淘沙 1

题目描述&#xff1a; 题目分析&#xff1a; 看了这一大串字符串&#xff0c;发现里面都是由16个字母组成&#xff0c;即 “tonight success notice we example crypto should back space sublim found system morning user the enter ”&#xff0c;并且这16个字母在第一行中…

【Kotlin】DSL 领域特定语言 ① ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )

文章目录一、apply 标准库函数分析1、apply 函数展示2、apply 函数原型分析函数原型参数和返回值分析3、匿名函数类型分析4、扩展函数回顾5、泛型扩展函数函数类型6、泛型扩展匿名函数7、apply 标准库函数参数分析泛型扩展函数匿名函数 与 普通匿名函数 对比apply 函数参数不是…

登高望远,一文解答 2023 年你最关心的前端热点问题

动手点关注干货不迷路本文预计阅读 25 min&#xff0c;建议先收藏后观看~一、刀光剑影的 2022时光荏苒&#xff0c;这绝不平淡的 2022 年已经走上历史的黄页&#xff0c;新的一年也逐渐看不到故人回首的光影。感谢你对前端技术领域持续关注&#xff0c;我们一直在这里等你。① …

致敬2202年,这些优秀的裁缝们

文 | 鹰钩鼻涕虫2202年过去了&#xff0c;不知道小伙伴们是否和我一样&#xff0c;绝大多数时间处于迷茫之中&#xff0c;除去其他因素不谈&#xff0c;在最后一个月到来之前&#xff0c;NLP 学界的表现似乎不如前几年那样“精彩”&#xff0c;甚至可说是“寡淡”&#xff0c;翻…

spring事务执行流程分析_5(注解形式 advisor等前置对象的生成)

调用beanFactory处理器 依旧进入刷新refresh方法AbstractApplicationContext#refresh -> 在上一篇文章spring事务执行流程分析_4(注解形式 EnableTransactionManagement的作用) 解析EnableTransactionManagement注解就是在此方法进行的,也就是在会注册 名字&#xff1a;i…

简单模拟vue实现数据劫持-视图更新双向绑定-2

接上&#xff0c; new一个实例对象&#xff0c;vc&#xff0c;构造函数动态绑定一个空对象&#xff0c;并在构造函数上绑定静态方法 $on进行事件的注册&#xff0c;$emit抛出执行事件 function observe() {// 利用策略模式-可以快速根据特定的事件&#xff0c;执行多个函数th…

最全总结 | 聊聊 Selenium 隐藏浏览器指纹特征的几种方式!

大家好&#xff0c;我是安果&#xff01;我们使用 Selenium 对网页进行爬虫时&#xff0c;如果不做任何处理直接进行爬取&#xff0c;会导致很多特征是暴露的对一些做了反爬的网站&#xff0c;做了特征检测&#xff0c;用来阻止一些恶意爬虫本篇文章将介绍几种常用的隐藏浏览器…

第九层(9):STL之map/multimap

文章目录前情回顾map/multimap概念差别构造函数赋值操作大小操作函数交换函数插入函数删除函数查找函数统计函数排序规则下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一的智能制造专业学生&#xff0c;在学习C/C的路上会越走越远&#xff0c;后…

三线金叉选股公式,均线、成交量、MACD共振

均线、成交量、MACD三线金叉共振选股公式思路还是比较简单的&#xff0c;分别写出均线金叉、成交量的均量线金叉、MACD的快线和慢线金叉&#xff0c;最后用AND连接这三个条件。 一、编写选股公式所需通达信函数 1、EXIST函数 含义&#xff1a;是否存在 用法&#xff1a;EXIST…

OpenGL | 搭建OpenGL 画画框架

一、搭建OpenGL 画画框架3D场景初始化&#xff08;1&#xff09; 代码void Init() {glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵,对投影矩阵操作gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);//创建一个对称的透视投影矩阵&#xff0c;并且用这个…

世界上最大型的 Demo Drop DJ 比赛来到元宇宙!

简要介绍 WBDD 于 2023 年 1 月 26 日至 2 月 8 日进入元宇宙。 认识世界上最大型的 DJ 比赛获胜者&#xff0c;并在元宇宙中伴随着他们的音乐跳舞。 该体验将是线下活动的延伸&#xff0c;由 Mike Williams 担任活动大使。 体验将对所有人开放。 完成 80% 的任务&#xff…

51单片机简易出租车计费系统仿真设计( proteus仿真+程序+报告+讲解视频)

51单片机简易出租车计费系统仿真设计( proteus仿真程序报告讲解视频&#xff09; 仿真图proteus 8.9及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0036 51单片机简易出租车计费系统仿真设计讲解视频1.主要功能&#xff1a;…

MXNet实现图片的样式风格迁移(Style Transfer)

样式迁移就是将一个样式&#xff08;风格&#xff09;应用到一张主图上&#xff0c;改变这张图片的风格&#xff0c;比如说拍摄了一张夜晚的图片&#xff0c;我们可以拿梵高的"星月夜"图片做样式&#xff0c;应用到拍摄的图片上&#xff0c;两者合成后的新图片&#…

linux基本功系列之uptime命令实战

文章目录一. uptime命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示当前系统运行负载情况3.2 显示机器正常运行的时间3.3 显示机器启动时间3.4 关于平均负载的介绍总结前言&#x1f680;&#x1f680;&#x1f680; 想要学好Linux&#xff0c;命令是基本功&#xff0c;企业…

推荐 5 个实用 GitHub 项目

本期推荐开源项目目录&#xff1a;1. AI-For-Beginners2. 一个小巧轻便的 PDF 阅读器3. 开源的智能手表4. 开源内容管理系统5. 程序员海外工作/英文面试手册01AI-For-Beginners之前推荐过 Microsoft 出品的 Web 技术栈课程&#xff0c;本开源项目同样是 Microsoft 的 Azure Clo…