1

我正在为一个应用程序编写 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));
        );
    }
}

感谢任何输入。

4

1 回答 1

0

长话短说 - 我没有意识到我实际上是在尝试模拟 AMQP 调用,菜鸟动作。

幸运的是,我能够通过使用改造将这些转换为 HTTP 请求来简化代码,因为应用程序只需要通过 AMQP 发送数据,而检索可以是一个简单的 HTTP GET,它允许轻松实现 mockwebserver 并实际上加快了速度向上请求。

于 2018-10-30T20:56:20.817 回答