我想用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();当我使用不需要回调的改装时,它可以工作。
发布于 2014-06-30 16:23:22
通过拥有一个Callback,您将告诉Retrofit调用请求并异步调用回调。这意味着在发生任何事情之前,您的测试就会退出。
有两种方法可以让它发挥作用:
Executor的一个实例(一个直接调用.run()的实例)传递给RestAdapter.Builder上的setExecutors,以便后台调用和回调调用同步进行。发布于 2018-07-09 04:28:35
关于改进2,请参见这里的答案:https://github.com/square/retrofit/issues/1259,您可以将同步执行器提供给OkHttpClient (通过它的dispatcher),并将这个客户机设置为Retrofit.Builder。还可以将相同的执行器设置为callbackExecutor。
例如:
CurrentThreadExecutor currentThreadExecutor = new CurrentThreadExecutor();
okhttp3.Dispatcher dispatcher = new okhttp3.Dispatcher(currentThreadExecutor);
OkHttpClient okHttpClient = new
OkHttpClient.Builder().dispatcher(dispatcher).build();
new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(httpUrl)
.addConverterFactory(JacksonConverterFactory.create())
.callbackExecutor(currentThreadExecutor)
.build();CurrentThreadExecutor实现示例:https://gist.github.com/vladimir-bukhtoyarov/38d6b4b277d0a0cfb3af
发布于 2019-08-05 21:31:11
或者,您可以在MockWebServer中使用Mockinizer:
OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.mockinize(mocks) // <-- just add this line
.build()以及您想要模拟的请求/响应,可以在mocks值中定义。在你的例子中,它看起来是这样的:
package com.appham.mockinizer.demo
import com.appham.mockinizer.RequestFilter
import okhttp3.mockwebserver.MockResponse
val mocks: Map<RequestFilter, MockResponse> = mapOf(
RequestFilter("/") to MockResponse().apply {
setResponseCode(200)
setBody("""{}""")
}
)https://stackoverflow.com/questions/24489882
复制相似问题