我正在与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
我收到错误的原因是因为在AsyncTask中调用了myMethod
,但在调用verify(...)
之前调用了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 :(得分:0)
verify(mock, timeout(1000)).myMethod(params);
您也可以仅使用executeOnExecutor
在测试中运行同步执行程序,然后将一些以测试为中心的代码引入生产组件,并进一步测试您想要的实际实现。超时可能是让您尽可能接近的最简单方法。