rust - 在 Rust 中组织代码/测试的正确方法是什么?
问题描述
在 Rust 书的第 11 章第 3 节(11.3)中,它讨论了将集成测试引入项目的过程。简而言之,为 'src' 创建一个名为 'tests' 的同级目录,并在 'tests' 目录中的文件中找到您的测试代码。书中示例的文件内容如下所示:
use adder;
#[test]
fn it_adds_two() {
assert_eq!(4, adder::add_two(2));
}
'src/lib.rs' 文件的代码在模块中声明:
mod adder {
...
}
这对我不起作用。我必须删除“lib.rs”中的模块声明,并在“使用加法器”之前添加它;我的集成测试文件中的声明:
extern crate adder;
所以,我很困惑。语言是否发生了变化,文档还没有跟上?是否不允许将库('src/lib.rs')中包含的代码组织成模块?如果有人能指出我对 Rust 代码组织的全面总结,那就太好了。谢谢。
解决方案
让你src/lib.rs
成为:
pub mod adder {
...
}
或者如果您在一个名为 的文件中有一个模块adder.rs
,那么只需将pub mod adder;
需要注意的重要一点是,每个文件都是一个模块,并且pub
需要关键字才能从 crate 中公开模块。
然后在您的集成测试文件(在 下/tests/
)中,执行以下操作:
use <cratename>::adder::<whatever you want to import or *>;
fn main() {
...
}
推荐阅读
- python - 我想将当前月份的两个数据框与上个月的日期映射
- javascript - Discord javascript l 超时后从数据库中删除数据
- c++ - 用QT实现截取部分屏幕
- python - 如何在熊猫系列中使用多个分隔符并拆分为多行
- java - 带有自定义按钮的 Java swing 错误
- laravel - spatie/sitemap 不会安装在 Godaddy 服务器上的 laravel8 中
- rest - Flutter 转换数据 Iso8601
- python - 当我在函数中使用 dateutil.parser.parse() 时,它返回一个列表而不是 datetime 对象?
- javascript - 在消息中获取所有被 ping 的用户,然后检查他们是否都有角色
- javascript - masonry (macy.js) 不适用于 ie 11。它在触发“检查模式”后工作