Mockito 验证异步方法
Mockito verify asynchronous methods
我有一个方法需要编写测试(我使用 instrumented androidTest
,但这也发生在 JVM 单元测试中):
void fooNeedToBeTested(String paramString) {
if(paramString.isEmpty())
return
// queue Runnable in worker thread to do something
BackgroundWorker.queueTask(new Runnable() {
@Override
public void run() {
repository.doSomething(paramString);
}
});
}
我需要验证 doSomething()
被调用所以我写了一个单元测试:
@Test
void testVerifyAsyncCallback() {
presenter.fooNeedToBeTested("string args");
Mockito.verify(repository).doSomething("string args");
}
但问题是:在run()
方法内部的异步代码之前执行的测试完成已经到达。然后 Mockito 无法验证它是否为 运行。
那么如何让测试运行ner等待异步代码执行完毕,然后通知Mockito去验证呢?
看来我们有 2 个解决方案:
首先是用timeout()
验证
其次是创建一个“假的”BackgroundWorker
(在 src/test 文件夹中)以直接调用 Runnable#run()
,而无需排队进入后台线程。
我有一个方法需要编写测试(我使用 instrumented androidTest
,但这也发生在 JVM 单元测试中):
void fooNeedToBeTested(String paramString) {
if(paramString.isEmpty())
return
// queue Runnable in worker thread to do something
BackgroundWorker.queueTask(new Runnable() {
@Override
public void run() {
repository.doSomething(paramString);
}
});
}
我需要验证 doSomething()
被调用所以我写了一个单元测试:
@Test
void testVerifyAsyncCallback() {
presenter.fooNeedToBeTested("string args");
Mockito.verify(repository).doSomething("string args");
}
但问题是:在run()
方法内部的异步代码之前执行的测试完成已经到达。然后 Mockito 无法验证它是否为 运行。
那么如何让测试运行ner等待异步代码执行完毕,然后通知Mockito去验证呢?
看来我们有 2 个解决方案:
首先是用timeout()
验证其次是创建一个“假的”
BackgroundWorker
(在 src/test 文件夹中)以直接调用Runnable#run()
,而无需排队进入后台线程。