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

Rust之编写自动化测试

1、测试函数的构成:

在最简单的情形下,Rust中的测试就是一个标注有test属性的函数。属性 (attribute)是一种用于修饰Rust代码的元数据。只需要将#[test]添加到关键字fn的上一行便可以将函数转变为测试函数。当测试编写完成后,我们可以使用cargo test命令来运行测试。这个命令会构建并执行一个用于测试的可执行文件,该文件在执行的过程中会逐一调用所有标注了test属性的函数,并生成统计测试运行成功或失败的相关报告。

2、使用assert! 宏检查结果:

assert! 宏由标准库提供,它可以确保测试中某些条件的值为true。assert! 宏可以接收一个能够被计算为布尔类型的值作为参数。当这个值为true时,assert! 宏什么都不用做并正常通过测试。而当值为false时,assert! 宏就会调用panic! 宏,进而导致测试失败。

3、使用assert_eq! 宏和assert_ne! 宏判断相等性:

标准库中专门提供了一对可以简化编程的宏 :assert_eq! assert_ne!。这两个宏分别用于比较并断言两个参数相等或不相等。在断言失败时,它们还可以自动打印出两个参数的值,从而方便我们观察测试失败的原因。

4、使用should_panic检查panic:

为测试函数添加一个额外的新属性:should_panic。标记了这个属性的测试函数会在代码发生panic时顺利通过,而在代码不发生panic时执行失败。

5、使用Result<T, E>编写测试:

也可以用Result<T, E>来编写测试!在运行失败时返回一个Err值而不是触发panic。示例:

#[cfg(test)]
mod tests {#[test]fn it_works() -> Result<(), String> {if 2 + 2 == 4 {Ok(())} else {Err(String::from("two plus two does not equal four"))}}
}

6、测试的组织结构:

Rust社区主要从以下两个分类来讨论测试:单元测试(unit test)和集成测试(integration test)。单元测试小而专注,每次只单独测试一个模块或私有接口。而集成测试完全位于代码库之外,和正常从外部调用代码库一样使用外部代码,只能访问公共接口,并且在一次测试中可能会联用多个模块。

(1)、单元测试:

单元测试的目的在于将一小段代码单独隔离出来,从而迅速地确定这段代码的功能是否符合预期。我们一般将单元测试与需要测试的代码存放在src目录下的同一文件中。同时也约定俗成地在每个源代码文件中都新建一个tests模块来存放测试函数,并使用cfg(test)对该模块进行标注。

(2)、集成测试:

在Rust中,集成测试是完全位于代码库之外的。集成测试调用库的方式和其他的代码调用方式没有任何不同,这也意味着你只能调用对外公开提供的那部分接口。集成测试的目的在于验证库的不同部分能否协同起来正常工作。能够独立正常工作的单元代码在集成运行时也会发生各种问题,所以集成测试的覆盖率同样是非常重要的。为了创建集成测试,你首先需要建立一个tests目录。

http://www.lryc.cn/news/128781.html

相关文章:

  • 【网络】网络层——IP协议
  • 动力电池系统介绍(十三)——高压互锁(HVIL)
  • C# 一种求平方根的方法 立方根也可以 极大 极小都可以
  • 爬虫逆向实战(十二)--某交易所登录
  • 【C++入门到精通】C++入门 —— list (STL)
  • SOLIDWORKS有限元分析
  • Kotlin Flow 冷流
  • Android Socket使用TCP协议实现手机投屏
  • 【云原生,k8s】Helm应用包管理器介绍
  • 两个内网之间的linux服务器如何互相登录?快解析内网穿透
  • sql server 存储过程 set ansi_nulls set quoted_identifier,out 、output
  • 1046:判断一个数能否同时被3和5整除
  • 优漫动游零基础如何学习好UI设计
  • Android岗位技能实训室建设方案
  • Mysql系列:Mysql5.7编译安装--系统环境:Centos7 / CentOS9 Stream
  • Docker容器与虚拟化技术:Dockerfile部署LNMP
  • elementUI date-picker 日期格式转为 2023/08/08格式
  • 生成式 AI 在泛娱乐行业的应用场景实践 – 助力风格化视频内容创作
  • elementPlus——图标引入+批量注册全局组件——基础积累
  • 国标GB28181安防视频平台EasyGBS显示状态正常,却无法播放该如何解决?
  • TIOVX:opencv的Mat类图像零拷贝转为openvx的vx_image格式,通过Not节点无效果问题记录
  • 变压器故障诊断(python代码,逻辑回归/SVM/KNN三种方法同时使用,有详细中文注释)
  • ASEMI探索整流桥GBU814的独特优势和应用领域
  • js脚本自动化之葫芦娃
  • 从零基础到精通IT:探索高效学习路径与成功案例
  • 2023.8.8巨人网络数据开发工程师面试复盘
  • Python Opencv实践 - 图像仿射变换
  • 如何使用CSS实现一个模态框(Modal)效果?
  • 关于API数据接口获取商品的数据的说明
  • Redis持久化——AOF