Android Volley-异步测试

时间:2019-01-22 18:43:37

标签: android unit-testing testing android-volley wiremock

我正在使用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在此测试期间同步发出其请求,但我不知道这是否可行以及要模拟什么。有任何提示吗?

0 个答案:

没有答案