我正在使用Microsoft Fakes分析非常長的方法,以重新分析它並獲得對它的更好理解。我已經分離出了幾行看起來像一個很好的候選人,可以將其重新分解爲一個單獨的私有方法。我正在採取的方法不是手動修改代碼(只能使用開箱即用的重新分解),以最大限度地減少我的更改帶來的後果。這裏是一個問題: 一旦我將這些行重新分解爲一個單獨的私有方法,我想要消除與這些行相關的所有設置代碼(以及包裝它們的新私有方法),並且只是「模擬出」該呼叫通過提供默認預設答案。這聽起來像一個存根/墊片,但我們正在談論被測試的類,所以我需要該類來執行它的代碼,除了「嘲笑」的方法。在Rhino Mocks中,我會使用PartialMock來將這些調用(在將它們虛擬成第一個!!!之後)去掉,但在這種情況下,Fakes能夠幫助我嗎?謝謝。在使用Fakes時正在測試的方法中「嘲笑」調用私有方法
3
A
回答
4
如果你想覆蓋私有方法(模擬私有方法),這樣做與墊片
一些很好的讀取: http://adamprescott.net/2012/08/28/unit-testing-and-private-methods/ 和 http://adamprescott.net/2012/08/21/a-shim-ple-tutorial-with-microsoft-fakes/
的例子有一個公共的方法Read
其內部調用SecretMethod
這是私人...
var target = new FileReader("foo");
var shim = new ShimFileReader(target);
bool calledShimMethod = false;
shim.SecretMethod =() =>
{
calledShimMethod = true;
return "bar";
};
target.Read();
1
作爲另一個答案我提到,墊片是這樣做的方式。但是,請注意,通過使用墊片,您的測試現在與公開方法的實施相關聯。在很多情況下,你無法做任何事情,特別是如果你正在測試你沒有寫的代碼。請記住,測試實現意味着當代碼更改時,測試更容易中斷。
話雖如此,你確實設法逃脫實施細節導致大量的設置,這是一個加號,所以你可以前往少脆。
在我正在進行的一個項目中,我使用了很多墊片,但是像我這樣,每次需要時都應該感覺很糟糕,因爲這是一個很不錯的設計指標。避免這種情況的最好方法是戰略模式(以及一般的DI),因爲您可以依靠存根。
相關問題
- 1. 嘲笑私人方法
- 2. 您可以在您正在測試的課程中嘲笑方法調用嗎?
- 3. 如何嘲笑的私有方法
- 4. 下的Mockito測試嘲笑的方法
- 5. 爲什麼使用Powermock嘲笑私人方法正在調用真正的方法?
- 6. 嘲笑類來測試它的方法
- 7. 如何測試嘲笑PHPUnit的方法
- 8. 如何測試實例的方法是否在嘲笑時用「self」調用?
- 9. PHPUnit - 嘲笑正在測試的Magento類的具體方法
- 10. 用嘲笑的方法調用
- 11. 如何嘲笑在我測試方法的函數調用 - 目前使用NSubsitute
- 12. 在Grails中沒有被嘲笑的私有方法2.5.1
- 13. 如何嘲笑在另一種方法內調用的方法?
- 14. 嘲笑使用PowerMock,Mockito和TestNG的公共方法的私有方法
- 15. 在mockito中嘲笑通用scala方法
- 16. 如何測試使用RSpec的方法搶救塊嘲笑3.3
- 17. 用PowerMockito嘲笑getClass方法
- 18. 我怎麼能嘲笑了正在使用中的方法測試(模型)的存儲庫方法
- 19. 嘲笑一個私人方法
- 20. 嘲笑不能模擬方法調用
- 21. Rhino Mock:嘲笑私人方法調用c#
- 22. 如何單元測試調用私有方法鏈的方法?
- 23. Mockito - 調用私有方法的測試方法
- 24. 從子類嘲笑方法,而單元測試類方法
- 25. 嘲笑鏈接的方法簡單的方法調用EasyMock的
- 26. 使用Pex測試私有方法
- 27. 使用Shims來測試私有方法
- 28. 嘲笑使用Rhino.Mocks的靜態方法
- 29. 嘲笑使用Mockito的方法
- 30. 使用Moq嘲笑方法的問題