当前位置: 首页 > news >正文

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.lryc.cn/news/335009.html

相关文章:

  • 软件文档交付清单(直接套用合集)
  • ModuleNotFoundError: No module named ‘ultralytics.utils‘
  • 2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024)
  • 秋招复习笔记——八股文部分:操作系统
  • 每日一题:C语言经典例题之杨辉三角
  • 1. TypeScript: JavaScript 的超集,为大型应用而生
  • vex-table—— 获取插入或修改数据后的tableData
  • 通俗易懂地解释Go语言不同版本中垃圾回收机制的演进过程
  • shamrockcms代码审计-啥也没有
  • 【C++】排序算法 --快速排序与归并排序
  • (Python)根据经纬度从数字高程模型(DEM)文件获取高度
  • 【WPF应用41】WPF中的Expander控件详解
  • golang变量初始化顺序
  • 魔众 文库配置异步转换
  • 创建型模式--2.简单工厂模式【人造恶魔果实工厂1】
  • 一些考研经验
  • StockTrading AI小模型股票自动交易系统 转载
  • 01背包问题合集 蓝桥OJ
  • Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG
  • 鸿蒙OS开发实战:【自动化测试框架】使用指南
  • 算法(二分查找)
  • 运筹学基础(六)列生成算法(Column generation)
  • [阅读笔记] 电除尘器类细分市场2023年报
  • Kubernetes学习笔记11
  • ✌2024/4/3—力扣—无重复字符的最长子串
  • Tauri 进阶使用与实践指南
  • 2024年最新社交相亲系统源码下载
  • git知识
  • 代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球
  • golang defer实现