rust项目组织结构和集成测试举例

概述

在学习rust的过程中,当项目结构略微复杂的时候,写集成测试的时候发现总是不能引用项目中的代码,导致编写测试用例失败。查阅了教程,一般举例都很简单。查阅了谷歌和百度以及ai,也没有找到满意的答案。这里记录一下,供大家参考。

项目结构(举例)在这里插入图片描述

cargo.toml

[package]
name = "test_rust"
version = "0.1.0"
edition = "2021"[dependencies]
rusqlite = { version = "0.31.0", features = ["bundled"] }[lib]
name = "test_rust"
path = "src/my_lib.rs"

my_lib.rs

pub mod rust_lang;

rust_lang/mod.rs

pub mod trait_sample;
pub mod borrow_mut;
......

rust_lang/borrow_mut/mod.rs

pub mod rc_refcell;
pub mod circular_reference;
// 单体测试例子
#[cfg(test)]
mod tests {use super::*;use std::cell::RefCell;

main.rs

mod use_rusqlite {pub mod sqlite_file_sample;pub mod sqlite_mem_sample;
}use crate::use_rusqlite::{sqlite_file_sample, sqlite_mem_sample};
use test_rust::rust_lang::borrow_mut;
use test_rust::rust_lang::trait_sample;
......

tests/integration_test_sample.rs

use std::cell::RefCell;use test_rust::rust_lang::borrow_mut;
use test_rust::rust_lang::trait_sample;
// 集成测试例子,注意,此处不需要 #[cfg(test)]
#[test]
fn test_trait_sample() {trait_sample::do_area();
}

总结

1.要想集成测试的测试文件中顺利引用src目录下的代码函数和功能,项目结构各层
结构之间必须有完整的引用和指示关系(参考上面各mod.rs),至于模块如何组织请
自行查阅教程。
2.main.rs自己引用src下的各层模块时,mod.rs中的各层模块定义不是必须的,
只要在main.rs中明确各层mod关系即可。
3.cargo.toml中的[lib]定义不是必须的,如果使用默认的lib.rs文件,则不需要特别指定。rust会默认使用lib.rs作为库文件

更详细的例子可以参考:
https://github.com/wang-xuewen/test_rust

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

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

相关文章

【嵌入式硬件】三极管伏安特性曲线-饱和区

1.三极管伏安特性 三极管工作电路如下图所示。 三极管伏安特性曲线 书本上的描述: 截止区:三极管工作在截止状态,当发射结的电压Ube 小于 导通电压(0.6V-0.7V),发射结没有导通;集电结处于反向偏置,没有放大作用。 放大区:三极管的发射极加正向电压(…

鸿蒙OS开发实例:【ArkTS类库多线程@Concurrent装饰器校验并发函数】

在使用TaskPool时,执行的并发函数需要使用该装饰器修饰,否则无法通过相关校验。从API version 9开始,该装饰器支持在ArkTS卡片中使用。 装饰器说明 Concurrent并发装饰器说明装饰器参数无。使用场景仅支持在Stage模型的工程中使用。装饰的函…

JS-23-原型继承

一、JS的原型继承 在传统的基于Class的语言如Java、C中,继承的本质是扩展一个已有的Class,并生成新的Subclass。 但是,JavaScript由于采用原型继承,根本不存在Class这种类型。 但是办法还是有的。我们先回顾Student构造函数&am…

Qt编译QScintilla(C++版)过程记录,报错-lqscintilla2_qt5d、libqscintilla2_qt5找不到问题解决

Qt编译QScintilla [C版] 过程记录 本文是编译该 QScintilla 组件库供 QtCreater 开发 C 桌面软件 流程记录一、编译环境 系统: Windows 10Qt:Qt 5.14.2编译套件:MinGW 64Qscintilla:QScintilla_src-2.11.6 二、下载链接 网站链…

HarmonyOS 和 OpenHarmony

HarmonyOS 和 OpenHarmony 支持的 shell 命令不同,因此有时候需要做一做区分,目前有些文档上没有标注,因此可能产生歧义。 HarmonyOS 支持 getprop: getprop hw_sc.build.os.apiversion # 查看API版本OpenHarmony 上支持 param…

STM32FATFS(未完待续)

注意,本博客适合像我一样的小白,会的不多,但是想快速做些东西,不适合会写驱动的大佬。另外,示例代码中的注释有误(从多个项目中移植过来的,未做更改),请不要被误导&#…

基于51单片机的自动化窗户控制系统设计

**单片机设计介绍,基于51单片机的自动化窗户控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的自动化窗户控制系统设计是一个结合了硬件与软件技术的综合性项目。以下是对该设计的概要描述&a…

Github 2024-04-02Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次关注人数:241693 人贡献…

Premiere Pro 2024:赋予创意翅膀,让你的视频飞翔 mac/win版

Premiere Pro 2024,作为Adobe旗下的旗舰视频编辑软件,自推出以来,一直在视频制作领域占据着重要的地位。随着技术的不断进步和创新,Premiere Pro 2024为用户带来了前所未有的编辑体验,重新定义了视频制作的标准。 Pre…

基于51单片机的简易计算器设计

1、任务 本课题模拟计算器设计硬件电路采用三部分电路模块构成, 第一部分是键盘模块电路,采用4*4矩阵式键盘作为输入电路; 第二部分是LCD1602液晶显示模块; 第三部分是以51单片机作为控制核心。 软件程序主要由三部分组成&am…

房间预定小程序怎么做_打造用户的专属空间预定小程序

在这个快节奏的时代,人们对于便捷、高效的生活方式有着越来越高的追求。无论是出差、旅行还是日常生活,一个好的住宿环境都是必不可少的。然而,传统的房间预定方式往往让人头疼不已,电话沟通、排队等待、繁琐的手续……这些问题不…

STM32 M3内核寄存器概念

内容主要来自<<M3内核权威指南>> 汇编程序中的最低有效位&#xff08;Least Significant Bit&#xff09;。LSB是二进制数中最右边的位&#xff0c;它代表了数值中的最小单位。在汇编程序中&#xff0c;LSB通常用于表示数据的最小精度或者作为标志位。 ---------…