15.编写自动化测试(下)

标题

  • 三、控制测试流程
    • 3.1 添加测试参数
    • 3.2 并行或连续运行测试
    • 3.3 显示函数输出
    • 3.4 指定/过滤测试用例名称
    • 3.5 忽略某些测试用例
    • 3.6 只运行被忽略的测试
  • 四、测试的组织结构
    • 4.1 概念引入
    • 4.2 测试私有函数
    • 4.2 单元测试
    • 4.3 集成测试
    • 4.4 集成测试中的子模块
    • 4.5 二进制crate的集成测试

三、控制测试流程

3.1 添加测试参数

  • cargo test执行时并行执行所有的测试用例,并截断输出到屏幕;
  • cargo test和可执行测试用例的参数都可以被改变;
  • 运行cargo test时后跟cargo test和测试二进制文件的参数,中间用--分隔;
  • cargo test --help会提示 cargo test 的有关参数;
  • cargo test -- --help 会提示分隔符--之后使用的参数;

3.2 并行或连续运行测试

设置测试程序并行执行数

cargo test -- --test-threads=1

3.3 显示函数输出

不只显示测试程序通过与否,还需要显示println!的输出;

cargo test -- --show-output

3.4 指定/过滤测试用例名称

pub fn add_two(a: i32) -> i32 {a + 2
}#[cfg(test)]
mod tests {use super::*;#[test]fn add_two_and_two() {assert_eq!(4, add_two(2));}#[test]fn add_three_and_two() {assert_eq!(5, add_two(3));}#[test]fn one_hundred() {assert_eq!(102, add_two(100));}
}

直接在cargo test后面加被#[test]标记的函数名称即可;
在这里插入图片描述

  • 红框中会运行所有包含add_名称的测试用例;
  • 蓝框中会运行add_three_and_two测试用例;

3.5 忽略某些测试用例

  • 使用#[ignore]标记运行cargo test运行时忽略的测试用例

例如为add_three_and_two添加#[ignore]属性
在这里插入图片描述

3.6 只运行被忽略的测试

cargo test -- --ignored

四、测试的组织结构

4.1 概念引入

测试主要分为单元测试(unit tests)与 集成测试(integration tests)

  • 单元测试:与其他部分隔离的环境中测试每一个单元的代码,以便于快速而准确的某个单元的代码功能是否符合预期;
  • 集成测试:对于自己的库来说完全是外部的。需要与其他外部代码一样,通过相同的方式使用代码;只测试公有接口而且每个测试都有可能会测试多个模块;

4.2 测试私有函数

  • Rust 的私有性规则允许对私有函数进行测试;
pub fn add_two(a: i32) -> i32 {internal_adder(a, 2)
}fn internal_adder(a: i32, b: i32) -> i32 {a + b
}#[cfg(test)]
mod tests {use super::*;#[test]fn internal() {assert_eq!(4, internal_adder(2, 2));}
}
  • internal_adder函数并没有标记为pub,所以它是个私有函数;
  • 它可以通过cargo test的运行;

4.2 单元测试

  • 单元测试与要测试的代码共同存放在位于src目录下相同的文件中;
  • 每个文件中创建包含测试函数的tests模块,并使用#cfg(test)标注模块;
  • 被标注为#cfg(test)的模块只有在cargo test时才会编译并执行,这样就减小了二进制包的体积;

4.3 集成测试

  • 目的是为了测试库的多个部分能否一起正常工作;
  • 需要创建一个与src同级的tests目录;
  • 只会在运行cargo test时编译这个目录中的文件;
  • 不需要tests目录下的任何rs文件中的任何代码标注#[cfg(test)]

创建集成测试用例: tests/integration_test.rs

#[test]
fn it_adds_two() {assert_eq!(4, adder::add_two(2));
}
  • 需要使用addr::引入要测试的模块;
  • addr就是创建cargo项目时指定的名字;
  • 下图中红框部分就是integration_test.rs测试文件中的运行结果;

在这里插入图片描述

  • 红框上面的部分是单元测试的结果
  • 红框中的部分是集成测试的结果
  • 红框下面的部分是文档测试的结果
  • 仍然可以只测试某个单独用例或使用cargo test --test integration_test测试integration_test.rs文件下的所有测试用例;

4.4 集成测试中的子模块

  • 每一个tests目录中的文件都被编译为单独的crate;
  • tests目录中的文件不能共享相同的行为;

假设setup函数需要被多个测试文件的测试函数调用,参考以下步骤

  1. 创建文件tests/common.rs并写入代码
pub fn setup() {// 编写特定库测试所需的代码
}

此时运行cargo test会看到输出在这里插入图片描述

  • 原意图只是希望它被其他测试文件调用而并不想要common出现在测试结果中;
  • 因此做如下修改
    1). 创建tests/common/mod.rs文件,这是在告诉 Rust 不要将 common 看作一个集成测试文件;
    2). 将common.rs文件中的代码移动到 mod.rs中,并删除common.rs文件;
    3). 此时执行cargo test就不出出现上面的情况了;

tests 目录中的子目录不会被作为单独的 crate 编译或作为一个测试结果部分出现在测试输出中。

  1. 然后就可以调用mod.rs中的函数;
mod common;#[test]
fn it_adds_two() {common::setup();assert_eq!(4, adder::add_two(2));
}

在这里插入图片描述

4.5 二进制crate的集成测试

  • 只包含二进制可执行程序的create不能创建集成测试;
  • 只有库crate才会向其他 crate 暴露了可供调用和使用的函数;
  • 二进制crate只能单独运行;

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

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

相关文章

Python脚本中使用 if 语句导致的错误代码

在 Python 脚本中使用 if 语句是一种常见的控制流程结构,用于根据条件决定程序的执行路径。当使用 Python 中的 if 语句时,可能会导致一些常见的错误。下面就是我经常遇到的错误代码示例及其可能的原因和解决方法,希望对大家有些帮助&#xf…

死锁预防之银行家算法

死锁预防之银行家算法 第一章 概述 Dijkstra提出了一种能够避免死锁的调度算法,称为银行家算法。 它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位…

韩国职场新趋势:员工拒绝晋升,追求工作与生活的平衡

在当前职场环境中,晋升通常被视为职业生涯发展的重要里程碑。然而,据韩国《今日财经》报道,现代重工工会在今年的劳资谈判中提出了一个令人关注的要求——“拒绝晋升权”。这一要求反映了韩国职场的新趋势,即越来越多的员工对高薪…

长期保存红酒的挑战与应对策略

云仓酒庄雷盛红酒,以其卓着的品质和口感,赢得了无数葡萄酒爱好者的喜爱。然而,对于那些希望长期保存这些珍贵佳酿的人来说,如何确保红酒的品质和风味不受时间的影响,却是一项充满挑战的任务。 长期保存红酒的大挑战来自…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 火星字符串(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

电影《加菲猫家族》观后感

上周看了电影《加菲猫家族》,本片其中有很多明亮的画面,相关艳丽的色彩,充满温馨的场景,很符合加菲猫的一贯画风,即使反派出场时,带有阴暗的感觉,看起也不是特别吓人,比较欢乐气氛&a…

定时器介绍之8253芯片

目录 定时器简介 8253功能介绍 组成 工作原理 相关引脚 启动方法 计数方式 实现 读取计数值 定时器简介 8253功能介绍 内部结构 相关引脚 计数器组成 工作原理 启动方法 计数方式 初始化:写入控制字——>写入计数初值 实现 计数长度选择&#xff1a…

虚拟机Ping不通主机

1.问题描述 虚拟机IP: 192.168.3.133 主机ip:192.168.3.137 虚拟机Ping不通主机 主机可以ping通虚拟机 2.解决方案 设置桥接模式 控制面板找到网络和Internet设置 3.问题解决

geoserver 如何设置数据目录

在GeoServer中,数据目录是存储配置文件、数据存储、图层、样式等的重要目录。默认情况下,GeoServer的数据目录位于GeoServer安装目录下的data_dir文件夹。但在很多情况下,用户可能希望将数据目录设置在一个自定义位置,以便更好地管…

手持气象仪:科技与自然交汇的奇妙工具

TH-SQ5在广袤无垠的大自然中,天气总是瞬息万变,让人难以捉摸。然而,随着科技的进步,人类已经能够借助各种先进的仪器来预测和监测天气变化,其中,手持气象仪便是其中的佼佼者。 手持气象仪,顾名…

Java获取本机IP地址的方法(内网、公网)

起因是公司一个springboot项目启动类打印了本机IP地址加端口号,方便访问项目页面,但是发现打印出来的不是“无线局域网”的ip而是“以太网适配器”ip,如下图所示 这样就导致后续本地起项目连接xxl-job注册节点的时候因为不在同个局域网下ping…

打假-代码都让AI写,CS还有前途吗?加州大学伯克利分校:CDSS申请人数飙升48%!

一、背景 现在 CSDN 上发现了一篇文章 点进去文档的内容在说CDSS专业 还有一篇文章 文章基本上都是同一个意思,CDSS专业申请人数飙升 48%,但却有人刻意的把计算机专业突出出来。我不确定有人刻意把 CDSS 专业 和 CS 专业混淆的目的是什么?…

【数据结构】红黑树实现详解

在本篇博客中,作者将会带领你使用C来实现一棵红黑树,此红黑树的实现是基于二叉搜索树和AVLTree一块来讲的,所以在看本篇博客之前,你可以先看看下面这两篇博客 【C】二叉搜索树-CSDN博客 【数据结构】AVLTree实现详解-CSDN博客 在这…

设计四大基本原则的全面解析

每每问起设计四大基本原则,无论是蜚荣全球的业内大咖还是初出茅庐的张三李四,都会不约而同地告诉你一个答案:亲密性、对齐、重复、对比。 自罗宾威廉姆斯于《写给大家看的设计书》中提出后,四大基本原则涵盖了品牌、电商、包装、…

xxe漏洞学习

一、什么是xxe漏洞 XXE就是XML外部实体注入,当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意文件读…

数据驱动制造:EMQX ECP 指标监测功能增强生产透明度

迈向未来的工业生产,需要的不仅是自动化,更是智能化。如果工业企业的管理者能够实时监测每一生产环节的设备运行状态,每一数据点位情况,洞察和优化每一步生产流程,他们将能够做出更精准的决策,提高生产效率…

硕士毕业论文《基于磁纹理的磁化动力学研究》

前言 本文是博主的硕士毕业论文,应该也是“自旋电子学(微磁学)”博客专栏的最后一篇博客,该毕业论文预设排版的PDF版本见下载链接:https://download.csdn.net/download/qq_43572058/89447526。若该博客专栏对读者您的…

SD-WAN在教育行业的应用及优势解析

随着教育领域的数字化转型,网络技术的需求变得愈发迫切。作为一种前沿的网络解决方案,SD-WAN正在为教育行业提供强有力的支持。本文将详细探讨SD-WAN在教育行业的应用,并分析其为教育行业带来的众多优势。 实现多校区高效互联 教育机构通常拥…

Dart 弱引用进阶

前言 村里的老人说:“真正的强者,都是扮猪吃老虎。” 日常开发中经常需要用到弱引用,Dart 语言里也有提供弱引用的接口 WeakReference,我们可以基于它开发更强大的复杂结构。 在前面的文章中,我们用到了一个以弱引用…

Linux——ansible里的变量

在ansible里,变量干嘛用的 本身,ansible就是致力于,用尽可能“通用”的剧本,干所有场合的工作…… ansible里的变量怎么写 字母开头,包括:字母数字下划线 变量怎么定义(声明) 1.…