【发布时间】:2019-12-07 12:38:18
【问题描述】:
我在为目标结构的方法确定单元测试时遇到了麻烦。
我有一个方法random_number,它根据结构的属性返回一个随机值,还有另一个方法plus_one,它采用第一种方法的结果并对其进行处理:
pub struct RngTest {
pub attr: u64,
}
impl RngTest {
pub fn random_number(&self) -> u64 {
let random = 42; // lets pretend it is random
return random * self.attr;
}
pub fn plus_one(&self) -> u64 {
return self.random_number() + 1;
}
}
对第一种方法进行单元测试,测试另一种方法的策略是什么?我想为plus_one() 的单元测试模拟self.random_number() 输出,以便在单元测试中拥有健全的代码。有一篇很好的帖子比较了different mocking libraries 并得出结论(很遗憾),它们中没有一个能真正脱颖而出。
我在阅读这些库的说明时学到的唯一一件事是,我可以模拟方法的唯一方法是将它们移动到一个 trait。我在这些库中没有看到任何示例(我查看了其中的 4 或 5 个),它们测试了与此类似的案例。
在将这些方法移动到特征(即使它们是)之后,我如何模拟 random_number 以对 RngTest::plus_one 的输出进行单元测试?
pub trait SomeRng {
fn random_number(&self) -> u64 {
let random = 42; // lets pretend it is random
return random * self.attr;
}
fn plus_one(&self) -> u64 {
return self.random_number() + 1;
}
}
impl SomeRng for RngTest {}
【问题讨论】:
-
在 Rust 中没有意义?
标签: unit-testing testing rust mocking