我正在为一个应用程序编写 UI 测试,该应用程序期望 JSON 有效负载作为对通过异步调用发出的请求的响应,该调用由我正在测试的活动中的按钮触发。我打算提供各种模拟有效负载来设置此活动的状态并在 UI 中声明各种项目。
我没有让调度程序捕获通过异步调用发出的请求。
异步调用是在模块内的一个类中进行的,这是我的应用程序的编译时依赖项,我觉得这是我的问题所在,甚至不确定这是否超出了 Espresso 的能力范围。
@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));
);
}
}
感谢任何输入。