Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android测试用例等待回调_Android - Fatal编程技术网

Android测试用例等待回调

Android测试用例等待回调,android,Android,我正在测试我的服务类,它可以在互联网上获得一些ip。我写过这样的测试: TestTryoutTestService webServices = new TestTryoutTestService(ENDPOINTESTURL); TestService adapter = webServices.getWebservice(); adapter.getIpAsync(mCallback); try { Thread.sleep(2000);

我正在测试我的服务类,它可以在互联网上获得一些ip。我写过这样的测试:

    TestTryoutTestService webServices = new TestTryoutTestService(ENDPOINTESTURL);
    TestService adapter = webServices.getWebservice();
    adapter.getIpAsync(mCallback);
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    assertEquals("IP is not equal", result, "1");
}

Callback<TestResponse> mCallback = new Callback<TestResponse>() {
    @Override
    public void success(TestResponse testResponse, Response response) {
        result = testResponse.getIp();
    }

    @Override
    public void failure(RetrofitError error) {
        fail();
    }
};
您可以使用

CountDownLatch latch = new CountDownLatch(1);

{
    ...
    TestTryoutTestService webServices = new TestTryoutTestService(ENDPOINTESTURL);
    TestService adapter = webServices.getWebservice();
    adapter.getIpAsync(mCallback);
    latch.await(2000, TimeUnit.MILLISECONDS);
    assertEquals("IP is not equal", result, "1");
}

Callback<TestResponse> mCallback = new Callback<TestResponse>() {
    @Override
    public void success(TestResponse testResponse, Response response) {
        result = testResponse.getIp();
        latch.countDown();
    }

    @Override
    public void failure(RetrofitError error) {
        fail();
    }
};
CountDownLatch闩锁=新的CountDownLatch(1);
{
...
TestTroyoutTestService webServices=新的TestTroyoutTestService(EndpointTestUrl);
TestService适配器=webServices.getWebservice();
adapter.getIpAsync(mCallback);
等待(2000,时间单位毫秒);
资产质量(“IP不相等”,结果为“1”);
}
Callback mCallback=new Callback(){
@凌驾
public void成功(TestResponse TestResponse,Response-Response){
结果=testResponse.getIp();
倒计时();
}
@凌驾
公共无效失败(错误){
失败();
}
};
确保结果声明为volatile,否则可能看不到跨线程的更改。 对于更复杂的问题,请考虑使用A(参见它的未来任务IMPL),它将在返回结果到调用线程时处理线程可见性问题。


编辑:关于你的更新,它是不是确实没有进入回调,或者只是没有更新结果?尝试如上所述使其不稳定,同时添加日志记录/断点以检查输入的回调。

发现问题。我还需要在我的Retro RestarAdapter中设置执行器,如下所示:.setExecutors(AsyncTask.THREAD\u POOL\u EXECUTOR,AsyncTask.THREAD\u POOL\u EXECUTOR)
CountDownLatch latch = new CountDownLatch(1);

{
    ...
    TestTryoutTestService webServices = new TestTryoutTestService(ENDPOINTESTURL);
    TestService adapter = webServices.getWebservice();
    adapter.getIpAsync(mCallback);
    latch.await(2000, TimeUnit.MILLISECONDS);
    assertEquals("IP is not equal", result, "1");
}

Callback<TestResponse> mCallback = new Callback<TestResponse>() {
    @Override
    public void success(TestResponse testResponse, Response response) {
        result = testResponse.getIp();
        latch.countDown();
    }

    @Override
    public void failure(RetrofitError error) {
        fail();
    }
};