[英]EasyMock — mock methods within tested class?
在我的代碼中,我有時會在同一個類中調用公共或私有方法。 這些方法不適合被引入自己的班級。 我調用的每種方法都在自己的單元測試中進行測試。
所以,如果我的A類中有一個方法,它也會在A類中調用這些方法,那么有沒有辦法模擬調用? 我當然可以剪切和粘貼我的期望/模擬行為,但這不僅是單調乏味,它會模糊測試點,違反模塊化,並且由於無法控制返回的內容而使測試更加困難。
如果沒有,這種事情的通常解決方案是什么?
聽起來你正在尋找Partial Mocks ......這里有一篇博文,內容涵蓋了它們: http : //www.jroller.com/alessiopace/entry/partial_mocks_with_easymock
這需要EasyMock ClassExtension,但不幸的是,它無法模擬私有方法。
這可以通過EasyMock 2.2類擴展或EasyMock 3.0及其開啟(包括類擴展)。
這里記錄了部分模擬:
http://www.easymock.org/EasyMock2_2_2_ClassExtension_Documentation.html
語法很簡單。 您指定了您正在嘲笑的類以及您正在嘲笑的方法。 在這個例子中,假設該類是“Dog”,它有兩個方法,“eat”和“eatUntilFull”。 您可以將此代碼放在eatUntilFull測試中:
mockDog = createMockBuilder(Dog.class).addMockedMethod("eat").createMock();
然后,您可以像任何其他模擬一樣對待它。
注意事項:
1)在你的班級中從另一個方法中調用一個方法可能表明設計不佳 - 你能將這個邏輯抽象到另一個班級嗎?
2)即使你不能,在測試期間讓你的方法本身調用另一個方法也沒有問題。 這可能是首選行為。
3)您仍然無法定位私有方法,因此您可能希望將它們設置為package-private而不是private。
一般來說,如果您需要模擬私有方法(或者您正在測試的同一個類上的公共方法),您應該考慮將此方法中的代碼移動到另一個類。
從測試的角度來看,測試方法如何歸檔預期狀態(無論是否調用其他方法)應該沒有意義。 關鍵點應該是方法執行的狀態更改,而不是它調用的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.