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

相关推荐
Flynt13 分钟前
我把真实的 ES 查询怼到 7059 星的 Rust 搜索引擎上:1366/1369 的兼容承诺,裂了 3 个缝
elasticsearch·搜索引擎·rust
kunicoding1 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全
小杍随笔3 小时前
egui 0.37 升级实录:卡顿修复与5倍性能回退
windows·rust·egui
云老大-阿里云国际站代理商7 小时前
华为云国际站渠道代理商:CSS查询很慢但CPU不高?磁盘I/O、JVM与分片问题怎么排查
css·jvm·华为云
呆呆虫128 小时前
SerpBase 省 credit 实战:缓存 + 去重,把重复请求砍掉一半
jvm·缓存
geovindu10 小时前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
戴西软件11 小时前
企业如何搭建自己的AI智能体?戴西智能体管理与戴西SKILL管理实战解析
运维·jvm·人工智能·自动化·rpa
gopher951114 小时前
RUST:错误处理 thiserror 详解
开发语言·后端·rust
geovindu1 天前
rust:Memento Pattern(续)
开发语言·后端·设计模式·rust·行为模式·备忘录模
Kapaseker1 天前
同样 4 行代码,C++ 编译通过,Rust 为什么直接拒绝?
rust