簡體   English   中英

EasyMock - 測試類中的模擬方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM