验证AsyncTask中的方法调用



我正在用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在AsyncTask中被调用,但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完成后调用验证?

尝试超时验证。

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

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

相关内容

  • 没有找到相关文章

最新更新