testing - 仅针对跨多个 crate 的测试实现特征的惯用方法是什么?
问题描述
我在一个有几十个板条箱的工作区工作。其中一个板条箱暴露了一个特征。作为一个模拟,我在每个函数中实现了这个特征()
(unimplemented!
它们实际上没有被使用)。我希望其他板条箱可以使用该实现,但仅在测试期间:这样做的惯用方式(最方便)是什么?
目前,实现是在一个mock
特性后面,我将这个带有mock
特性的板条箱作为开发依赖项添加到一个随机板条箱中。这迫使编译器在测试期间考虑该实现。这是一个丑陋的黑客,所以我宁愿有另一种方式。
解决方案
使用门控的项目test
不会从板条箱中导出,即使对于将其用作开发依赖项的板条箱也是如此。
从 Rust 1.51.0 开始,您可以通过使用自定义功能来解决这个问题。
在Cargo.toml
:
[features]
test-traits = []
在代码中:
#[cfg(feature = "test-traits")]
impl MyTrait for MyStruct {}
在依赖它的 crates 中,您可以启用新的解析器:
[package]
resolver = "2"
并添加一个启用该功能的开发依赖项:
[dev-dependencies]
your_crate = { version = "1.0", features = ["test-traits"] }
如果没有启用新的解析器,所有功能都是跨目标的附加功能,因此启用该功能dev-dependencies
也会使其适用于非测试代码。使用新的解析器,现在的处理方式更符合您的预期。
推荐阅读
- android - Crashlytics 不会使用 apk-splits 上传映射文件
- sql - 提取超过一个月没有数据输入的工作区
- c++ - c++ 11 typeid of string and sizeof nullptr
- kubernetes - Hazelcast 无法在 Kubernetes 中启动
- c# - 我们可以使用 Web API 发送内存流对象吗?
- c++ - 我对 substr 函数有问题(C++)
- python - TypeError: unhashable type: 'list' using add edge from networkx
- r - 单链接层次聚类 - 分支高度的箱线图以检测异常值
- jquery - 找到完整的 tr 值并将其绑定为 json 格式以发送到 api
- vba - 如何将新邮件(不包括 Re: & Fwd: )移动到共享收件箱中的另一个文件夹