Junit 验证AsyncTask中的方法调用
我正在用Mockito运行Android 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); } 如果我像
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);