我正在为一个应用程序编写UI测试,该应用程序期望JSON负载作为对通过异步调用发出的请求的响应而传递,该请求由我正在测试的活动中的按钮触发。我打算提供各种模拟有效负载来设置此活动的状态并在UI中声明各种项目。
我不能让调度程序捕获通过异步调用发出的请求。
异步调用是在模块中的类中进行的,这是我的应用程序的编译时依赖性,我觉得这就是我的问题所在,甚至不确定这是否超出Espresso的能力范围。 / p>
@Before
public void setup() throws Exception {
server = new MockWebServer();
server.start();
// setting API in my production code to the MockWebServer
settingsProvider.setWebServiceURL(server.url("/").toString());
server.setDispatcher(new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest recordedRequest) throws InterruptedException {
if (recordedRequest.getPath().startsWith("/v1/customers")) {
return new MockResponse().setResponseCode(200).setBody(JSONstring);
}
return new MockResponse().setResponseCode(204);
}
});
}
如果我在实际测试中提出了测试请求,则该请求有效:
@Before
public void testGet(){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(server.url("/v1/customers").toString()).build();
Log.d(LOG_TAG, "Test send GET " + request);
try {
Response response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
通过添加日志,我已经验证我的API URL设置正确,并且与MockWebServer处于同一端口。该应用程序当前未使用任何依赖项注入。
异步调用的主要部分:
public void makeAsyncCall(final Application ctx , final AsyncWebServiceRequest request, final ResponseListenerInterface rli){
final AsyncWebServiceResponseListener listener = new AsyncWebServiceResponseListener(ctx, request, rli);
IntentFilter responseIntent = new IntentFilter(CommsActions.SEND);
responseIntent.addCategory(request.getMessageType());
ctx.registerReceiver(listener, responseIntent);
try {
ctx.startService(intent);
} catch (Exception e) {
Log.e(LOG_TAG , Log.getStackTraceString(e));
);
}
}
赞赏任何输入。
答案 0 :(得分:0)
长话短说-我没有意识到我实际上是在尝试模拟AMQP通话,菜鸟动作。
幸运的是,我能够通过使用改造将它们转换为HTTP请求,从而简化了代码,因为该应用程序只真正需要通过AMQP发送数据,而检索可以是一个简单的HTTP GET,因此可以轻松实现模拟Web服务器并实际上加快了请求。