首页 > 其他分享 >在Rust项目中,一般测试用例函数 #[(test)] 都写在哪里? 如果要测试 main.rs 文件中的函数该怎么做?

在Rust项目中,一般测试用例函数 #[(test)] 都写在哪里? 如果要测试 main.rs 文件中的函数该怎么做?

时间:2025-01-23 16:42:56浏览次数:1  
标签:函数 lib rs add 测试用例 test main

eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

在 Rust 项目中,测试用例通常放在以下两个位置:

1. 与源代码同文件中的模块

  • 测试用例函数一般写在与实现代码同一个文件中,放在一个名为 tests 的模块里,使用 #[cfg(test)] 注解。
  • 这种方式适用于对模块内的函数或逻辑进行单元测试。

示例如下:

// main.rs 文件中的函数
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 测试模块
#[cfg(test)]
mod tests {
    use super::*; // 引入外部作用域的实现代码

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
    }
}

2. 独立的测试文件

  • 如果项目是一个库或较大规模的项目,可以将测试用例写在 tests 目录下的独立文件中。
  • 这种方式通常用于集成测试,而不是单元测试。测试文件通过 use 语句引入需要测试的模块。

示例如下:

project/
├── src/
│   ├── lib.rs   // 实现代码
│   └── main.rs  // 主程序入口
└── tests/
    └── integration_test.rs  // 集成测试文件

tests/integration_test.rs 中:

use your_crate_name::add; // 引入库函数

#[test]
fn test_add_integration() {
    assert_eq!(add(2, 3), 5);
}

如果要测试 main.rs 文件中的函数:

  1. 将函数公开

    • 如果 main.rs 中的函数需要测试,可以将它们标记为 pub,以便可以从其他模块访问。
  2. 直接在 main.rs 中写测试用例

    • 如第一个示例,直接在 main.rs#[cfg(test)] 模块中编写测试用例。
  3. 提取逻辑到 lib.rs

    • 推荐的方式是将 main.rs 中的逻辑提取到一个库文件 lib.rs 中。
    • 这样可以在 lib.rs 中实现所有功能逻辑,main.rs 仅作为入口调用这些函数。
    • 测试用例可以直接写在 lib.rs 文件中,或者在 tests 目录中进行集成测试。

示例:

src/
├── lib.rs   // 提取逻辑到此文件
├── main.rs  // 调用 lib.rs 中的逻辑

lib.rs

pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
    }
}

main.rs

use your_crate_name::add;

fn main() {
    let result = add(2, 3);
    println!("2 + 3 = {}", result);
}

标签:函数,lib,rs,add,测试用例,test,main
From: https://www.cnblogs.com/Tifahfyf/p/18688127

相关文章

  • 比特c语言-数组和函数实践:扫雷
      目录游戏分析和设计游戏功能说明游戏界面分析和设计数据结构分析文件结构设计游戏设计思路游戏代码实现游戏扩展游戏分析和设计游戏功能说明使用控制台实现经典扫雷游戏游戏可以通过菜单实现是否退出游戏扫雷棋盘默认为9*9格子默认随机布置10个雷可以进行排查雷如......
  • k8s工作负载-RS&&DP&&DS
    1RS:ReplicaSet的目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合。因此,它通常用来保证给定数量的、完全相同的Pod的可用性。它也是deployment资源的基础资源,来整副本的稳定性。23RS资源实例4[root@k8smaster01~]#catnginx-rs.yaml5......
  • (一)一文读懂transformers库中常见组件PreTrainedModel,PretrainedConfig,AutoTokenizer
    文章目录一、训练管理大师:`Trainer`和`TrainingArguments``TrainingArguments`:训练的“魔法配方”`Trainer`:训练的“超级厨师”二、数据整理小能手:`DataCollatorWithPadding`三、因果语言模型的输出管家:`CausalLMOutputWithPast`四、模型加载与处理的智能助手:`AutoPro......
  • Python 融合豆包 AI 优化测试用例生成
    在软件开发过程中,测试用例的编写是确保软件质量的关键环节。传统的测试用例编写往往依赖人工经验,不仅耗时费力,还容易出现遗漏。随着人工智能技术的发展,利用AI来辅助生成测试用例成为了提高效率和质量的有效途径。本文将介绍如何使用Python与豆包AI融合,实现测试用例的......
  • deformable attention中生成初始采样点位置(init_weights或者_reset_parameters函数)
    def_reset_parameters(self):constant_(self.sampling_offsets.weight.data,0)"""初始化偏移量预测的偏置(bias),使得初始偏移位置犹如不同大小的方形卷积核组合"""#(8,)[0,pi/4,pi/2,3*pi/2,...,7*pi/4]thetas=torch.arange(self.n_heads,......
  • 测试工程师效率提升系列第二篇:测试用例管理自动化——从 Excel 到结构化数据
    在测试工程师的日常工作中,测试用例管理是一个重要环节。很多团队仍然依赖于Excel表格来管理测试用例,包含用例描述、步骤、预期结果等内容。然而,这种方式存在以下痛点:难以复用:Excel文件往往是静态的,无法直接与自动化脚本关联。易出错:人工更新用例容易遗漏或引入错误,特......
  • 源码分析之Openlayers样式篇IconImage类
    访问Openlayers网站(https://jinuss.github.io/Openlayers_map_pages/,网站是基于Vue3+Openlayers,里面有大量的实践和案例。觉得还不错,可以给个小星星Star,鼓励一波https://github.com/Jinuss/OpenlayersMap哦~概述在Openlayers中,IconImage类主要用于表示一个图标图......
  • Linux下printf函数的输出问题
    Linux下printf函数的输出问题        向屏幕输出,C语言中可以使用printf函数,实际上,printf不是直接把数据输出到屏幕上的,首先把输出的内容写到缓冲区中,当缓冲区放满以后,它会把缓冲区的内容输出到屏幕上。        为什么这样做呢?        有一个效率的......
  • js 数组 push() pop() shift() unshift() splice() sort() reverse() 的这些方法的用
    JavaScript的数组对象提供了多种方法来操作数组内容。以下是您提到的方法的简要说明和用法:1.`push()`-用途:向数组的末尾添加一个或多个元素,并返回新的长度。-语法:`array.push(element1,...,elementN)`-示例:`letarr=[1,2,3];arr.push(4);//arrisnow[1,......
  • 回调函数 事件处理 dotnet .net 有界队列 背压机制(Backpressure)有界队列
    回调函数事件处理dotnet.net有界队列背压机制(Backpressure)有界队列通过有界队列来实现背压,确保生产者不会以超过消费者处理能力的速度发送数据。usingSystem.Threading.Channels;publicclassProgram{staticasyncTaskMain(string[]args){//创......