Testing 对于跨多个板条箱的测试,实现特性的惯用方法是什么?

Testing 对于跨多个板条箱的测试,实现特性的惯用方法是什么?,testing,rust,Testing,Rust,我在一个有几十个板条箱的工作间工作。其中一个板条箱暴露了一个特征。作为一个模拟,我在未实现的情况下为()实现了这个特性在每个函数中(它们没有实际使用)。我希望该实现可以从其他板条箱中获得,但只能在测试期间使用:这样做的惯用方式(最方便)是什么 现在,实现是在一个mock特性后面,我将这个带有mock特性的板条箱作为开发人员依赖项添加到一个随机板条箱中。这迫使编译器在测试期间考虑该实现。这是一个丑陋的黑客行为,所以我宁愿采用另一种方式。使用测试进行门控的项目不会从板条箱中导出,即使对于将其用作开发

我在一个有几十个板条箱的工作间工作。其中一个板条箱暴露了一个特征。作为一个模拟,我在
未实现的情况下为
()
实现了这个特性在每个函数中(它们没有实际使用)。我希望该实现可以从其他板条箱中获得,但只能在测试期间使用:这样做的惯用方式(最方便)是什么


现在,实现是在一个
mock
特性后面,我将这个带有
mock
特性的板条箱作为开发人员依赖项添加到一个随机板条箱中。这迫使编译器在测试期间考虑该实现。这是一个丑陋的黑客行为,所以我宁愿采用另一种方式。

使用
测试
进行门控的项目不会从板条箱中导出,即使对于将其用作开发依赖项的板条箱也是如此

,您可以通过使用自定义功能来解决此问题

Cargo.toml
中:

[features]
test-traits = []
在守则中:

#[cfg(feature = "test-traits")]
impl MyTrait for MyStruct {}
在依赖它的板条箱中,您可以启用新的resolover:

[package]
resolver = "2"
并添加启用该功能的开发人员依赖项:

[dev-dependencies]
your_crate = { version = "1.0", features = ["test-traits"] }

如果没有启用新的解析器,所有功能都是跨目标添加的,因此在
dev dependencies
中启用该功能也将使其适用于非测试代码。使用新的冲突解决程序,现在处理起来更像您预期的那样。

很抱歉造成混淆。我修改了我的问题,所以它是clearer@Boiethios我更新了答案,但我没有看到你的问题更新。我认为这是目前最好的选择。我将更新以添加这一点。为什么不在类型
struct Dummy的测试箱中实现trait
是在同一个测试箱中定义的,而不是为
()
定义的?看起来您的问题可能由的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将这个问题标记为已经回答了。@Shepmaster我会为实用程序创建一个板条箱,就像一些函数一样,但这对于trait来说有点奇怪implementations@Boiethios那篇文章有三个不同的答案。