簡體   English   中英

驗證是否調用了一種方法-單元測試

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

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