我想模拟MockWebServer的网络通信.不幸的改造回调永远不会被调用.我的代码:
MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setResponseCode(200).setBody("{}")); server.play(); RestAdapter restAdapter = new RestAdapter.Builder().setConverter(new MyGsonConverter(new Gson())) .setEndpoint(server.getUrl("/").toString()).build(); restAdapter.create(SearchService.class).getCount(StringUtils.EMPTY,new Callback<CountContainer>() { @Override public void success(CountContainer countContainer,Response response) { System.out.println("success"); } @Override public void failure(RetrofitError error) { System.out.println("error"); } }); server.shutdown();
当我在没有回调的情况下使用改装时,它可以工作.
解决方法
通过使用Callback,您可以告诉Retrofit调用请求并异步调用回调.这意味着您的测试在任何事情发生之前就会退出.
有两种方法可以使其工作:
>在测试结束时使用锁并等待,直到调用其中一个回调方法.>将同步Executor的实例(只是立即调用.run()的实例)传递给RestAdapter.Builder上的setExecutors,以便后台调用和回调调用同步发生.