[英]Verify that a method is called - Unit Test
我正在嘗試使用Java為Android應用程序編寫一些單元測試,但是由於我是單元測試實現中的新手,因此我認為我需要一些有關以下特定問題的幫助。
我試圖在Google以及stackoverflow內找到解決方案,但沒有找到任何對我有幫助的答案。
我在A類中有一個非常簡單的方法:
@Override
public void beeperChanged(boolean active) {
b.setBeeper(active);
savePrinterToData(b);
}
b這是類b的一個實例。
savePrinterToData是一種允許將實例b保存在數據庫中的方法
我想測試這種方法,更具體的測試,如果,當我打電話beeperChanged,然后setBeeper上稱為B和如果savePrinterToData也被稱為。
我寫了這個:
@RunWith(PowerMockRunner.class)
@PrepareForTest({PosApplication.class, AppInfoHelper.class, SharedPreferencesHelper.class})
public class OnePrinterSettingFragmentPresenterTest {
@Mock
private A mA;
@Mock
private B mB;
@Test
public void beeperChanged() throws Exception {
boolean boo;
boo = true;
mA.beeperChanged(boo);
verify(mB).setBeeper(boo);
}
我已經閱讀到verify可以或多或少地執行檢查是否調用方法的任務。 但是android Studio用紅色下划線聲明說這是錯誤的,並且沒有給我任何解決方案。 (我目前不測試是否調用savePrinterToData ,因為我至少要首先解決setBeeper的問題)
我很困,任何幫助都很好。 謝謝
我認為問題出在您如何使用Powermock。 通常,@ Mock應該用於被測類的依賴關系,並且被測類的實例應使用@InjectMocks批注獲取。
@InjectMocks
private A mA;
@Mock
private B mB;
區別:@Mock創建類的“啞”代理,而@InjectMocks創建類的真實實例,並嘗試將@Mock實例與該類的字段匹配並設置。 因此,在您顯示的代碼中,mA是一個啞代理測試對象,沒有調用beeperChanged方法
對不起,Update沒讀到它是easymock框架,我的回答是假定為模仿。 對於Easymock,我認為等效注釋為@TestSubject
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.