我正在使用Volley库发出HTTP请求。
我想测试一下我使用WireMock存根HTTP响应的地方。 WireMock存根部分不是问题,但我想不出一种允许我等待异步Volley请求完成的解决方案。
@Test
public void callOnSuccessWhenGoodResponse()
{
// WireMock stubbing...
myVolleyClass.signup(infos, mockedCallback); // Async operation
// Have to wait here for the async operation to finish
Mockito.verify(mockedCallback).onSuccess(token);
}
如何等待异步操作完成?
我尝试过这样的CountDownLatch
:
@Test
public void callOnSuccessWhenGoodResponse()
{
CountDownLatch latch = new CountDownLatch(1);
MyCallback callback = new MyCallBack()
{
@Override
void onSuccess()
{
latch.countDown();
}
void onError()
{
fail("Expected onSuccess but got onError");
}
};
// WireMock stubbing...
myVolleyClass.signup(infos, callback); // Async operation
latch.await(3, TimeUnit.SECONDS);
assertEquals(0, latch.getCount());
}
但是await()
阻止了当前线程,Volley执行了我们在UI线程上给它的回调,我猜这将是测试正在运行的线程。因此countdown()
将永远不会及时执行。
最好的解决方案是让Volley在此测试期间同步发出其请求,但我不知道这是否可行以及要模拟什么。有任何提示吗?