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上出售。讓我們不要在這裏討論這個討論(!),但是感謝您指出了另一種方法,這當然是有效的。 –
那麼這是一個奇怪的問題 - 那麼你的方法的「合理性」肯定與其他方法的合理性有關 - 但你不願意討論這些方法。如果你只是問「這個代碼是否工作」,那麼答案是「是」,但你可以自己嘗試過...... –