2014-07-08 92 views
0

我正在使用Mockito運行Android Junit測試。我測試的是創建的AsyncTask的活動,我想驗證的方法被稱爲在AsyncTask,但我得到一個錯誤:在AsyncTask中驗證方法調用

Wanted but not invoked 

測試用例看起來是這樣的:

@Test 
public void testFoo(){ 

// Mocks have been initialized 

myActivity.onCreate(null); 

verify(myMock).myMethod(params); 
} 

如果我像這樣運行測試,我得到一個錯誤

Wanted but not invoked 

的原因我的錯誤是因爲myMethod在的AsyncTask被調用,但在調用myMethod之前調用。

爲了證明這是正確的,我把暫停測試裏面這樣

@Test 
public void testFoo(){ 

// Mocks have been initialized 

myActivity.onCreate(null); 

thread.sleep(1000); // sleep so the AsyncTask can finish before calling verify 

verify(myMock).myMethod(params); 
} 

,並通過了測試。

顯然,我不希望線程實際上睡覺。如何確保在我的AsyncTask完成後調用驗證?

+0

你能提供編譯的代碼嗎? – gontard

回答

0

嘗試verification with timeout

verify(mock, timeout(1000)).myMethod(params); 

你也可以在你的測試只使用executeOnExecutor同步執行運行,但你介紹一些測試中心的代碼到生產組件,並在測試你要實際執行進一步流浪。超時可能是讓你儘可能接近你的最簡單的方法。