如何在测试中模拟外部依赖关系? [英] How to mock external dependencies in tests?
本文介绍了如何在测试中模拟外部依赖关系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经在实现中使用外部包装箱对汽车进行了建模和实现:
I've modeled and implemented a car using an extern crate inside the implementation:
extern crate speed_control;
struct Car;
trait SpeedControl {
fn increase(&self) -> Result<(), ()>;
fn decrease(&self) -> Result<(), ()>;
}
impl SpeedControl for Car {
fn increase(&self) -> Result<(), ()> {
match speed_control::increase() { // Here I use the dependency
// ...
}
}
// ...
}
我想测试上面的实现,但是在我的测试中,我不想让speed_control::increase()
像生产时那样运行-我想对其进行模拟.我该如何实现?
I want to test the implementation above, but in my tests I don't want speed_control::increase()
to behave like it was in production - I want to mock it. How can I achieve this?
推荐答案
我建议您将后端功能speed_control::increase
包装为某些特征:
I would suggest you wrap the back-end function speed_control::increase
in some trait:
trait SpeedControlBackend {
fn increase();
}
struct RealSpeedControl;
impl SpeedControlBackend for RealSpeedControl {
fn increase() {
speed_control::increase();
}
}
struct MockSpeedControl;
impl SpeedControlBackend for MockSpeedControl {
fn increase() {
println!("MockSpeedControl::increase called");
}
}
trait SpeedControl {
fn other_function(&self) -> Result<(), ()>;
}
struct Car<T: SpeedControlBackend> {
sc: T,
}
impl<T: SpeedControlBackend> SpeedControl for Car<T> {
fn other_function(&self) -> Result<(), ()> {
match self.sc.increase() {
() => (),
}
}
}
这篇关于如何在测试中模拟外部依赖关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文