Android MockWebServer及其回调改造
我想通过MockWebServer模拟网络通信。不幸的是,改装回调从未调用。我的代码:Android MockWebServer及其回调改造,android,retrofit,mockwebserver,Android,Retrofit,Mockwebserver,我想通过MockWebServer模拟网络通信。不幸的是,改装回调从未调用。我的代码: MockWebServer server = new MockWebServer(); server.enqueue(new MockResponse().setResponseCode(200).setBody("{}")); server.play(); RestAdapter restAdapter = new RestAdapter.Builder().setConv
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();
MockWebServer服务器=新建MockWebServer();
enqueue(newmockresponse().setResponseCode(200.setBody(“{}”));
server.play();
RestAdapter RestAdapter=new RestAdapter.Builder().setConverter(new MyGsonConverter(new Gson()))
.setEndpoint(server.getUrl(“/”).toString()).build();
create(SearchService.class).getCount(StringUtils.EMPTY,
新回调函数(){
@凌驾
public void成功(CountContainer CountContainer,响应){
System.out.println(“成功”);
}
@凌驾
公共无效失败(错误){
System.out.println(“错误”);
}
});
server.shutdown();
当我在没有回调的情况下使用翻新时,它可以工作 通过使用
回调
,您告诉改型调用请求并异步调用回调。这意味着您的测试将在任何事情发生之前退出
有两种方法可以实现这一点:
- 在测试结束时使用锁,并等待调用其中一个回调方法
- 将同步
(仅立即调用执行器的实例
的实例)传递给.run()
RestAdapter.Builder上的
,以便后台调用和回调调用同步发生setExecutors
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实现的示例:
或者,您可以将Mocknizizer与MockWebServer一起使用:
OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.mockinize(mocks) // <-- just add this line
.build()
请参见在执行服务器.play()之前是否需要附加回调?当我更改订单时,会引发异常java.lang.IllegalStateException:调用play()之前无法检索端口+1谢谢,提供同步
执行器
效果很好。锁不会阻塞主线程,因此不允许回调(在主线程上)执行,因此锁永远不会释放吗?通过“锁定”,我想到了类似于倒计时闩锁的东西
这不适用于改装2。如何使其在改装2中工作?
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("""{}""")
}
)