【Rust自学】11.10. 集成测试
11.10 集成测试11.10.1. 什么是集成测试在Rust里集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样这也意味着它们只能调用公共API。集成测试的目的是验证库的多个部分能否正确地一起工作。这一点有别于单元测试单元测试比较小也比较专注。单元测试单独测试一个模块还可以测试私有接口。有时单独运行没问题的代码合在一起使用时仍可能出问题。集成测试正是为了尽早发现并解决这类问题而存在的。因此集成测试的覆盖率很重要。11.10.2.tests目录要创建集成测试首先创建tests目录。这个目录与src并列cargo会自动在那里寻找集成测试文件。你可以在这个目录下创建任意数量的集成测试文件。编译时cargo会把每个测试文件当作一个单独的包也就是一个单独的crate。下面演示如何创建集成测试文件1. 创建tests目录在src旁边创建一个名为tests的文件夹2. 创建测试文件在tests下创建一个.rs测试文件并给它取名。这里我用的是integration_test.rs3. 把测试代码移到测试文件里以 11.9. 单元测试 的代码为例lib.rspub 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); } }因为每个集成测试文件都是一个单独的crate所以这个文件integration_test.rs如果想测试那个crate就必须先把lib.rs的内容导入作用域。在这个例子中由于我把项目命名为RustStudy所以包名也是RustStudy。如果不清楚可以到Cargo.toml里看name字段。在这个例子中可以写use RustStudy;来导入如果想导入某个具体函数也可以。导入之后可以直接写测试函数。不需要写#[cfg(test)]因为tests目录下的代码只有在执行cargo test时才会运行。只需要给测试函数标注#[test]即可。完整代码如下integration_test.rsuse RustStudy; #[test] fn it_adds_two() { let result RustStudy::add_two(2); assert_eq!(result, 4); }输出$ cargo test Compiling RustStudy v0.1.0 (file:///projects/RustStudy) Finished test profile [unoptimized debuginfo] target(s) in 0.15s Running unittests src/lib.rs (target/debug/deps/RustStudy-48a2c23cb22e1ddc) running 1 test test tests::internal ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/integration_test.rs (target/debug/deps/integration_test-e60608d740742c0c) running 1 test test it_adds_two ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests RustStudy running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s可以看到这个输出显示运行了两个测试一个来自lib.rs单元测试一个来自integration_test.rs集成测试。11.10.3. 运行指定的集成测试要运行某个特定的集成测试函数使用cargo test test_name。要运行某个测试文件中的所有测试函数使用cargo test --test file_name。看个例子现在tests下有两个文件。如果我只想运行integration_test.rs里的测试函数可以运行cargo test --test integration_test11.10.4. 集成测试中的子模块因为tests下的每个文件都被编译成单独的crate所以这些文件彼此不共享行为这与src下的文件不同。那么如果想把测试函数中重复的逻辑提取到一个helper函数里以避免重复该怎么写呢例如我在tests下创建了common.rs来存放helper函数试着运行测试$ cargo test Compiling RustStudy v0.1.0 (file:///projects/RustStudy) Finished test profile [unoptimized debuginfo] target(s) in 0.13s Running unittests src/lib.rs (target/debug/deps/RustStudy-48a2c23cb22e1ddc) running 1 test test tests::internal ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/common.rs (target/debug/deps/common-5306c3915df25199) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/integration_test.rs (target/debug/deps/integration_test-e60608d740742c0c) running 1 test test it_adds_two ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests RustStudy running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s可以看到common.rs出现在了测试输出中。但因为common.rs只是用来存放helper函数的它本身不需要被测试。这种写法是错误的。正确做法是在tests下创建common目录在里面放一个mod.rs文件并把helper函数移过去然后删除原来的common.rs这是Rust能理解的另一种命名约定。Rust不会把common模块当作集成测试文件测试输出中也不会再出现common因为tests下的子目录不会被编译成单独的crate。如果要在集成测试文件中使用那里的内容只需在文件开头写mod folder_name;。在这个例子中就是mod common;。使用时写common::your_function。在这个例子中就是common::setup()。11.10.5. 针对二进制crate的集成测试如果项目是二进制crate也就是只有src/main.rs而没有src/lib.rs就不能在tests下创建集成测试即使创建了也无法把main.rs里的函数导入作用域。因为只有库crate也就是有lib.rs的才能把函数暴露给其他crate使用。二进制crate意味着独立运行。因此Rust的二进制项目通常会把这些逻辑放在lib.rs里而在main.rs里只保留简单调用。这样项目就会被视为库crate就可以用集成测试来检查代码。

相关新闻

FlexRay通信控制器中断寄存器配置与应用实战指南

FlexRay通信控制器中断寄存器配置与应用实战指南

1. 项目概述与中断机制的核心价值在嵌入式系统,尤其是汽车电子和工业控制领域,实时性和可靠性不是锦上添花,而是生死攸关的底线。想象一下,一辆高速行驶的汽车,其引擎控制单元(ECU)需要毫秒级响…

2026/7/23 18:53:42 阅读更多 →
V2G微电网多目标优化调度与改进灰狼算法研究

V2G微电网多目标优化调度与改进灰狼算法研究

1. 项目概述在新能源电力系统快速发展的背景下,微电网作为整合分布式能源的重要载体,其优化调度问题日益受到关注。本项目针对含风、光、荷、储的微电网系统,引入V2G(Vehicle-to-Grid)技术,提出了一种改进的…

2026/7/23 18:53:42 阅读更多 →
2026国内满意度调研机构权威排行榜 数据采集与本地化服务领跑者

2026国内满意度调研机构权威排行榜 数据采集与本地化服务领跑者

本榜单评选国内头部满意度调研机构前十,筛选标准包括数据采集能力、本地化服务网络、样本质量与方法学严谨度,并附5大高精度研究方法与数据驱动决策深度解析。引言:评估维度与方法选择说明我们以多维指标构建权威评估框架,兼顾现实…

2026/7/23 18:53:42 阅读更多 →

最新新闻

问题:如何监控生产时效,提升效率?

问题:如何监控生产时效,提升效率?

引言:计划表≠生产效率 在工厂的日常运营中,生产计划表(或称排程表)是生产的“指挥棒”。然而,许多管理者常常陷入一个误区:认为只要计划表做得漂亮、排得满,生产效率就自然上去了。他们每天盯着…

2026/7/23 19:08:48 阅读更多 →
【Springboot毕设全套源码+文档】基于springboot电脑商城系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于springboot电脑商城系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/23 19:08:48 阅读更多 →
Agentic自主进化机制:合成数据与强化学习的实践

Agentic自主进化机制:合成数据与强化学习的实践

1. 项目概述:Agentic自主进化机制的核心逻辑去年在开发一个对话系统时,我遇到了典型的数据瓶颈——人工标注成本高、覆盖场景有限。当时尝试用强化学习(RL)做在线学习,但探索效率太低。直到看到Agentic自主进化这个概念…

2026/7/23 19:08:48 阅读更多 →
区域功能节点的工程角色:国家数据基础设施的跨域路由层怎么理解

区域功能节点的工程角色:国家数据基础设施的跨域路由层怎么理解

“区域功能节点—业务节点—接入连接器”正在成为国家数据基础设施的通用架构语言。这套分层最早在跨省数据流通的生产实践中成型,本文从工程视角拆解每层的职责边界与设计要点。三层各管什么。接入连接器是终端接入层:负责数据源接入、规则执行与使用控…

2026/7/23 19:08:48 阅读更多 →
限时开放|AI自动发邮件SOP模板库(含27个行业话术+13类触发条件+5套A/B测试方案),仅剩最后83份授权码

限时开放|AI自动发邮件SOP模板库(含27个行业话术+13类触发条件+5套A/B测试方案),仅剩最后83份授权码

更多请点击: https://codechina.net 第一章:AI自动发邮件教程 AI驱动的邮件自动化正成为提升工作效率的关键实践。本章聚焦于使用Python结合主流AI与邮件服务API,构建可定制、可扩展的自动发信系统。核心依赖包括 openai(用于生成…

2026/7/23 19:08:48 阅读更多 →
Windows安装Ubuntu20.04系统(双系统)

Windows安装Ubuntu20.04系统(双系统)

安装准备:一个空白U盘(≥4G),电脑足够的空闲硬盘空间(用来安装Ubuntu系统) 1.Ubuntu镜像文件 历史版本选择“其他下载”——“查看历史版本”——“找到所需版本(个人下载选择桌面映像&#x…

2026/7/23 19:07:48 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻