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