Junit 验证AsyncTask中的方法调用

Junit 验证AsyncTask中的方法调用,junit,android-asynctask,mocking,mockito,Junit,Android Asynctask,Mocking,Mockito,我正在用Mockito运行Android Junit测试。我正在测试一个创建AsyncTask的活动,我想验证是否在AsyncTask中调用了一个方法,但我得到一个错误: Wanted but not invoked 测试用例如下所示: @Test public void testFoo(){ // Mocks have been initialized myActivity.onCreate(null); verify(myMock).myMethod(params); } 如果我像

我正在用Mockito运行Android Junit测试。我正在测试一个创建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
,但在调用
myMethod
之前调用了
verify(…)

为了证明这是正确的,我在测试中做了如下暂停

@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);
}
测试通过了

很明显,我不想让线程真正休眠。如何确保在我的
异步任务完成后调用verify?

试试


您也可以在测试中仅使用
executeOnExecutor
在同步执行器上运行,但随后您将一些以测试为中心的代码引入到生产组件中,从而偏离了测试所需的实际实现。超时可能是让您尽可能接近所需的最简单方法。

您能提供可编译的代码吗?
verify(mock, timeout(1000)).myMethod(params);