Rhino Mocks与使用依赖注入和构造函数注入的设计模式紧密耦合,但我通常不遵循依赖注入范例,也不喜欢为我的测试工具重新构建我的解决方案。使用虚拟受保护的工厂方法来模拟在类中创建的对象?
采取这样的场景:
class MyClass{
public void MyMethod(...){
var x = new Something(...);
x.A();
x.B();
x.C();
}
}
难道是比较典型的和可以接受的,而不是做到以下几点,因为这不是我一般会想注入依赖的情况下 - 它可以是所考虑的一部分MyClass
'行为/逻辑。
class MyClass{
public void MyMethod(...){
var x = NewSomething(...);
x.A();
x.B();
x.C();
}
virtual protected Something NewSomething(...){
return new Something(...);
}
}
现在我可以(我认为)延长MyClass
无论是在我的测试项目的具体类,或使用犀牛...对不对?这是否是正确的b)合理的,普通的做事方式?
另一种方法,我可以看到比其他DI可能是因为我其实在我的项目,该项目产生的所有实例根据需要ClassFactory
类;那么我会找到一种方法在我的测试中模拟/存根。但是这对我来说似乎'很臭',尽管我知道这是一些人使用的模式。
这是什么东西?如果你在你的构造函数中接受某种SomethingFactory(例如,只是一个'Func'),它肯定会更灵活......基本上你的prod代码现在仍然与'Something'紧密耦合......我会尝试开始考虑这是一个依赖。 –
@JonSkeet是的,这将消除这个问题,但我没有在批发DI上出售。让我们不要在这里讨论这个讨论(!),但是感谢您指出了另一种方法,这当然是有效的。 –
那么这是一个奇怪的问题 - 那么你的方法的“合理性”肯定与其他方法的合理性有关 - 但你不愿意讨论这些方法。如果你只是问“这个代码是否工作”,那么答案是“是”,但你可以自己尝试过...... –