【Rust自学】11.6. 控制测试运行:并行和串行(连续执行)测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
11.6.1. 控制测试的运行方式
cargo test
和cargo run
一样,cargo test
也会编译代码并生成一个二进制文件用于测试,只不过cargo test
是在测试模式下。
为cargo test
添加参数可以改变cargo test
的行为,如果不添加任何参数,那么就会执行默认行为:
- 并行运行所有测试
- 在测试通过的情况下,捕获(不显示)所有输出,使读取与测试结果相关的输出更容易。如果测试不通过,输出是会显示的,以便于程序员纠错。
命令行参数分为两类:
- 针对
cargo test
的参数,紧跟cargo test
后 - 针对生成的可执行文件:放在
--
之后。例如:cargo test --help
,这个参数会显示cargo test
所有可用的参数。cargo test -- --help
会显示所有能放在--
之后的参数,也就是所有针对可执行文件的参数。
11.6.2. 并行运行测试
在运行多个测试时默认会使用多个线程来并行地运行测试,这样运行得更快,但代价是这些测试之间不能有相互依赖,而且它们不依赖于某个共享状态(环境、工作目录、环境变量…)。
如果两个测试都依赖于某个共享的状态,其中一个测试运行完时把状态改了,那么其他共享了相同状态的测试就会受到影响。
如果不想并行地运行测试,或是希望精确地控制测试时所启用的线程数量,那就可以使用--test-threads
这个参数,这个参数时传递给二进制文件的。在这个参数后紧跟着线程的数量。
比如说cargo test -- --test-threads=1
就是使用一个线程(单线程),这样的话如果执行多个测试它会比并行测试花费更多的时间。但它也有优点,因为它是顺序执行,所以这些测试因为共享状态而出现干扰的情况就比较少了。
11.6.3. 显式函数输出
默认,如果测试通过,Rust的test
库会捕获(不显示)所有打印到标准输出的内容,比如说println!
输出的内容。如果测试不通过,就会显示打印的内容和失败信息。
看个例子:
fn prints_and_returns_10(a: i32) -> i32 {println!("I got the value {a}");10
}#[cfg(test)]
mod tests {use super::*;#[test]fn this_test_will_pass() {let value = prints_and_returns_10(4);assert_eq!(value, 10);}#[test]fn this_test_will_fail() {let value = prints_and_returns_10(8);assert_eq!(value, 5);}
}
- 在被测试的函数
prints_and_returns_10
调用了println!
输出传入的值,然后返回10 - 测试函数
this_test_will_pass
传了4给被输出函数,所以被测试函数会打印4,然后又把函数固定的返回值与10比较。这个测试会成功。 - 测试函数
this_test_will_fail
传了8给被输出函数,所以被测试函数会打印8,然后又把函数固定的返回值与5比较。这个测试会失败。
测试结果:
$ cargo testCompiling silly-function v0.1.0 (file:///projects/silly-function)Finished `test` profile [unoptimized + debuginfo] target(s) in 0.58sRunning unittests src/lib.rs (target/debug/deps/silly_function-160869f38cff9166)running 2 tests
test tests::this_test_will_fail ... FAILED
test tests::this_test_will_pass ... okfailures:---- tests::this_test_will_fail stdout ----
I got the value 8
thread 'tests::this_test_will_fail' panicked at src/lib.rs:19:9:
assertion `left == right` failedleft: 10right: 5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtracefailures:tests::this_test_will_failtest result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00serror: test failed, to rerun pass `--lib`
测试结果中没有成功的测试所打印的句子,但是有失败的测试打印的句子:“I got the value 8”。
如果你想让成功的测试也打印句子,就可以加一个参数:cargo test -- --show-output
,此时的输出如下:
$ cargo test -- --show-outputCompiling silly-function v0.1.0 (file:///projects/silly-function)Finished `test` profile [unoptimized + debuginfo] target(s) in 0.60sRunning unittests src/lib.rs (target/debug/deps/silly_function-160869f38cff9166)running 2 tests
test tests::this_test_will_fail ... FAILED
test tests::this_test_will_pass ... oksuccesses:---- tests::this_test_will_pass stdout ----
I got the value 4successes:tests::this_test_will_passfailures:---- tests::this_test_will_fail stdout ----
I got the value 8
thread 'tests::this_test_will_fail' panicked at src/lib.rs:19:9:
assertion `left == right` failedleft: 10right: 5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtracefailures:tests::this_test_will_failtest result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00serror: test failed, to rerun pass `--lib`
相关文章:
![](https://i-blog.csdnimg.cn/direct/c3b136c8cc67455eb1ec02b4d8fb2b0e.png)
【Rust自学】11.6. 控制测试运行:并行和串行(连续执行)测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.6.1. 控制测试的运行方式 cargo test和cargo run一样,cargo test也会编译代码并生成一个二进制文件用于测试,…...
![](https://i-blog.csdnimg.cn/direct/b851981098064fdb960b56bd46d8f380.png)
某漫画网站JS逆向反混淆流程分析
文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…...
![](https://www.ngui.cc/images/no-images.jpg)
React 中事件机制详细介绍:概念与执行流程如何更好的理解
React 的事件机制是一个非常重要的概念,它涉及到 React 如何处理用户的交互事件。React 的事件系统与传统的 DOM 事件系统有所不同,它在底层使用了事件委托和合成事件(Synthetic Events)来优化性能。下面,我们将从 Rea…...
![](https://i-blog.csdnimg.cn/direct/e73c30fd98f546a8a861a30a370a9a9e.png)
Day04-后端Web基础(Maven基础)
目录 Maven课程内容1. Maven初识1.1 什么是Maven?1.2 Maven的作用1.2.1 依赖管理1.2.2 项目构建1.2.3 统一项目结构 2. Maven概述2.1 Maven介绍2.2 Maven模型2.3 Maven仓库2.4 Maven安装2.4.1 下载2.4.2 安装步骤 3. IDEA集成Maven3.1 配置Maven环境3.1.2 全局设置 3.2 Maven项…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3模板语法+响应式基础
模板语法 1. disabled指令,可以用于禁用按钮 <button :disabled"isButtonDisabled">Button</button> //:disabled是一个指令,用于根据isButtonDisabled的值来动态控制按钮的禁用状态。 使用场景: 1.防止用户重复点击…...
![](https://www.ngui.cc/images/no-images.jpg)
【面试题】简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势
云原生(Cloud Native) 定义:云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的优势。它涵盖了一系列技术和理念,包括容器化、微服务架构、自动化部署与管理等。特点:云原生应用程序被设计为可弹性…...
![](https://i-blog.csdnimg.cn/direct/1fc742ce992f43b29438ea08904c2a4e.png)
数据挖掘实训:天气数据分析与机器学习模型构建
随着气候变化对各行各业的影响日益加剧,精准的天气预测已经变得尤为重要。降雨预测在日常生活中尤其关键,例如农业、交通和灾害预警等领域。本文将通过机器学习方法,利用历史天气数据预测明天是否会下雨,具体内容包括数据预处理、…...
![](https://i-blog.csdnimg.cn/direct/8c15db5440a9422dbbb18e2193a9d031.png)
STM32如何使用内部晶振作为晶振
目录 前言 首先说明一下芯片内部并没有时钟, 而是内部振荡。使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。 环境: 芯片:STM32F103C8T6 Keil:V5.24…...
![](https://i-blog.csdnimg.cn/direct/7018eb525e8f4c61956416b4ae13b748.png)
【Maui】导航栏样式调整
前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET MAUI 是一款开放源代码应用,是 X…...
![](https://i-blog.csdnimg.cn/direct/4339bad58073496cb0a746fcbceeab1e.png)
【黑马程序员三国疫情折线图——json+pyechart=数据可视化】
json数据在文末 将海量的数据处理成我们肉眼可以进行分析的形式,数据的可视化,可以分为两个步骤: 数据处理:利用三方网站厘清json层次格式化,再对文件的读取、检查是否符合JSON规范以及规范化、JSON格式的转化&#…...
![](https://i-blog.csdnimg.cn/direct/322caf0ea60e4969abab0c9f31f50d6c.png#pic_center)
如何实现多级缓存?
本文重点说一说在Java应用中,多级缓存如何实现。 多级缓存是比较常见的一种性能优化的手段,一般来说就是本地缓存分布式缓存。 本地缓存一般采用Caffeine和Guava,这两种是性能比较高的本地缓存的框架。他们都提供了缓存的过期、管理等功能。…...
![](https://i-blog.csdnimg.cn/img_convert/f492165ec033721785008bb4dd83e5a5.png)
Saas数据库迁移单租户数据
1、背景 租户使用Saas系统,用一段时间后要将系统、数据搬迁到自建服务器。该Saas系统没有按租户分库,且数据库数据量太大,需要将单租户的数据抽取出来。Saas系统使用Mysql5.7数据库,主要使用INFORMATION_SCHEMA.COLUMNS表进行数据…...
![](https://www.ngui.cc/images/no-images.jpg)
LeetCode100之括号生成(22)--Java
1.问题描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例1 输入:n 3 输出:["((()))","(()())","(())()","()(())","()()()&qu…...
![](https://i-blog.csdnimg.cn/direct/a5c5e526ccbd4ba59b19814cc503177e.png)
阿里云ios镜像源
阿里云镜像源:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载centos7...
![](https://www.ngui.cc/images/no-images.jpg)
芯片:为何英伟达的GPU能在AI基础设施领域扮演重要角色?
英伟达的GPU之所以能在AI基础设施领域扮演重要角色,主要源于其硬件架构的优势以及其与深度学习算法的高度兼容性。以下是几个关键因素: 1. 并行计算能力 GPU(图形处理单元)本质上是为处理大量并行计算任务而设计的。与CPU相比&a…...
![](https://i-blog.csdnimg.cn/direct/282f4b56083f47a3b4211d0240aaddde.jpeg#pic_center)
Linux系统之hostname相关命令基本使用
Linux系统之hostname相关命令基本使用 一、检查本地系统版本二、hostname命令的帮助说明中文帮助说明 三、hostname命令的基本使用1. 查看计算机名2. 查看本机上所有IP地址3. 查看主机FQDN4. 查看短主机名 四、hostnamectl命令的使用1. 查看主机详细信息2. 设置主机名3. hostna…...
Domain Adaptation(李宏毅)机器学习 2023 Spring HW11 (Boss Baseline)
1. 领域适配简介 领域适配是一种迁移学习方法,适用于源领域和目标领域数据分布不同但学习任务相同的情况。具体而言,我们在源领域(通常有大量标注数据)训练一个模型,并希望将其应用于目标领域(通常只有少量或没有标注数据)。然而,由于这两个领域的数据分布不同,模型在…...
![](https://www.ngui.cc/images/no-images.jpg)
在php中,Fiber、Swoole、Swow这3个协程都是如何并行运行的?
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
![](https://www.ngui.cc/images/no-images.jpg)
SQLite PRAGMA
SQLite的PRAGMA命令是一种特殊的命令,用于在SQLite环境中控制各种环境变量和状态标志。PRAGMA值可以被读取,也可以根据需求进行设置【0†source】。 PRAGMA命令的语法格式如下: 要查询当前的PRAGMA值,只需提供该PRAGMA的名字&am…...
![](https://www.ngui.cc/images/no-images.jpg)
使用python调用JIRA6 REST API及遇到的问题
JIRA认证方式简述 JIRA接口调用有两种认证方式访问Jira Rest API,基本认证⽅式(⽤户名和密码)和OAuth1认证方式。 基本认证⽅式:因为⽤户名和密码会被浏览器重复地请求和发送,即使采⽤ SSL/TLS 发送,也会有安全隐患,…...
![](https://i-blog.csdnimg.cn/direct/e5a0b41de8c040fc8b37bf9441d31917.png#pic_center)
基于STM32的智能电表可视化设计:ESP8266、AT指令集、python后端Flask(代码示例)
一、项目概述 随着智能家居的普及,智能电表作为家庭用电管理的重要工具,能够实时监测电流、电压及功率,并将数据传输至后台进行分析和可视化。本项目以STM32C8T6为核心,结合交流电压电流监测模块、ESP8266 Wi-Fi模块、OLED显示屏…...
![](https://i-blog.csdnimg.cn/direct/ecaebe577c4147bea153fd28c860a3ea.png)
图片和短信验证码(头条项目-06)
1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构: {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…...
![](https://www.ngui.cc/images/no-images.jpg)
2501,wtl显示html
原文 在MFC程序中有专门封装的CHTMLView来显示超文本文件,如果在对话框中显示网页可用CDHTMLDialog,甚至可实现多页超文本向导风格的对话框,但是在WTL中却没有单独封装超文本的对应控件,这是因为COM组件的使用和编写本来就是ATL的强项,WTL扩展的是ATL欠缺的桌面应用的功能部分…...
![](https://i-blog.csdnimg.cn/direct/31c42ea5ae194e459c4bce508a48d17c.png)
嵌入式C语言:什么是指针?
目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…...
![](https://www.ngui.cc/images/no-images.jpg)
解锁 KaiwuDB 数据库工程师,开启进阶之路
解锁 KaiwuDB 数据库工程师试题,开启进阶之路 一、KaiwuDB 数据库全方位洞察 (一)核心特性深度解析 原生分布式架构:摒弃传统集中式存储的局限,KaiwuDB 采用原生分布式架构,将数据分散存于多个节点。这不仅能有效避免单点故障风险,保障数据的高可用性,还能凭借并行处…...
![](https://i-blog.csdnimg.cn/direct/21d1bf5b2c6444b3b33ad9c5168a5125.png)
ffmpeg7.0 aac转pcm
#pragma once #define __STDC_CONSTANT_MACROS #define _CRT_SECURE_NO_WARNINGSextern "C" { #include "libavcodec/avcodec.h" }//缓冲区大小(缓存5帧数据) #define AUDIO_INBUF_SIZE 40960 /*name depthu8 8s16 …...
![](https://www.ngui.cc/images/no-images.jpg)
【Pandas】pandas Series rdiv
Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...
![](https://www.ngui.cc/images/no-images.jpg)
线程安全问题介绍
文章目录 **什么是线程安全?****为什么会出现线程安全问题?****线程安全问题的常见场景****如何解决线程安全问题?**1. **使用锁**2. **使用线程安全的数据结构**3. **原子操作**4. **使用volatile关键字**5. **线程本地存储**6. **避免死锁*…...
![](https://www.ngui.cc/images/no-images.jpg)
为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器
本文问题 现在我们回到 ONE/TWO/TREE 的资源存储库 的设计--用来指导 足以 支持 本项目(为AI聊天工具增加一套知识系统)的 核心能力 “语言处理” 中 最高难度系数的“自然语言处理” 中最具挑战性的“含糊性” 问题的解决。--因为足以解决 自然语言中最…...
![](https://www.ngui.cc/images/no-images.jpg)
初识verilog HDL
为什么选择用Verilog HDL开发FPGA??? 硬件描述语言(Hardware Descriptipon Lagnuage,HDL)通过硬件的方式来产生与之对应的真实的硬件电路,最终实现所设计的预期功能,其设计方法与软件…...
![](https://img-blog.csdnimg.cn/20200607111803397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Z0aW1lcw==,size_16,color_FFFFFF,t_70)
网站设计开发软件有哪些/新闻稿在线
QT怎么自动一次性修改、替换程序中所有变量名? 熟悉的编译器都有这个功能, 初学QT,搜索无果,找了一会儿,分析给大家。 最直接的办法:选中变量名,CtrlShiftr ,变成红色之后即可更改。. 选中变…...
![](/images/no-images.jpg)
有域名 如何免费建设网站/天津最新消息今天
phpExcel,操作excel很方便,尤其是可以方便的加入图片,支持jpg gif png格式。 下载地址:http://www.codeplex.com/PHPExcel 下面是总结的几个使用方法 include ‘PHPExcel.php’; include ‘PHPExcel/Writer/Excel2007.php’; //或…...
![](https://img-blog.csdnimg.cn/20200320164611424.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FjdGlvblRlY2g=,size_16,color_FFFFFF,t_70#pic_center)
广州建网站的公司有哪些/做百度推广的业务员电话
问题: 仅用慢日志文件,如何快速获取分时报告? 如果有监控系统,获取分时报告(每小时慢查询的条数报告)不难,如果只有慢日志文件,就会有点费劲。 实验: 通过 pt-query-…...
![](/images/no-images.jpg)
西客站网站建设/百度下载免费安装
我觉得我很亲近,但我无法解决这个问题。我只想打印字段tpnc的数值结果。只有一个数字要打印。在 我的代码是:import httplib, urllib, base64, json, requests headers { # Request headers Ocp-Apim-Subscription-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX…...
![](https://s1.51cto.com/attachment/201312/120103677.png)
如何做网站导航栏/网络营销案例ppt
很多时候,新机器批量部署可以使用kickstart、cobbler等来批量部署,但如果想重装linux呢,这两个工具能不能做到,我不太清楚,我做不了,于是可以考虑使用sshvnc来实现远程重装linux系统,就像我们在…...
![](mall/kmenus/001.png)
免费铺货诚招代理商/百度seo工具
这次给大家带来js如何直接获取网页中图片地址,js直接获取网页中图片地址的注意事项有哪些,下面就是实战案例,一起来看一下。第一种方法:js通过正则实现/*** 获取html代码中图片地址* param htmlstr* returns {Array}*/function ge…...