13

Android JUnit テストでMockWebServerライブラリを使用しています。サーバーを呼び出す SDK をテストしています。そのMockWebServerため、これらのサーバー URL をオーバーライドし、SDK が送信するものをキャプチャしてアサーションを作成するために使用しています。

私が直面している問題は、それを実行しserver.takeRequest()て新しいRecordedRequest変数に割り当てようとすると、テストが2番目にハングアップし、server.takeRequest()場合によっては最初の変数でもハングアップすることです-エミュレーターで実行するとハングアップします最初の方法ですが、物理的な Android デバイスで実行すると、2 番目の方法server.takeRequest()でフリーズします。server.takeRequest()

public void testSomething() {
  final MockWebServer server = new MockWebServer();

  try {
    server.play();
    server.enqueue(new MockResponse().setBody("")
      .setResponseCode(HttpURLConnection.HTTP_INTERNAL_ERROR));
    server.enqueue(new MockResponse().setBody("")
      .setResponseCode(HttpURLConnection.HTTP_OK));
    server.enqueue(new MockResponse().setBody("")
      .setResponseCode(HttpURLConnection.HTTP_OK));

    URL url = server.getUrl("/");
    // This internal method overrides some of the hardcoded URLs 
    // within the SDK that I'm testing.
    Util.overrideUrls(url.toString()) 

    // Do some server calls via the SDK utilizing the mock server url.

    RecordedRequest requestFor500 = server.takeRequest();
    // Do some assertions with 'requestFor500'

    // Do some more server calls via the SDK utilizing the mock server url.

    /* 
     * This is the part where the JUnit test hangs or seems to go into 
     * an infinite loop and never recovers 
     */
    RecordedRequest requestAfter500Before200 = server.takeRequest();
  } catch {
    ...
  }
}

私は何か間違ったことをしていますか、それともこれはある種のバグMockWebServerですか?

4

2 に答える 2

1

MockWebServer のディスパッチ キューに問題があるようです。これは、200 または 302 以外の応答を提供するときに何らかの理由でフリーズします。カスタム ディスパッチャを提供することでこれを解決しました。

MockWebServer server = ...;

final MockResponse response = new MockResponse().setResponseCode(401);

server.setDispatcher(new Dispatcher() {
    @Override
    public MockResponse dispatch(RecordedRequest request) 
        throws InterruptedException {
        return response; // this could have been more sophisticated
    }
});

MockWebServer 2.0.0 でテスト済み

于 2014-09-24T10:50:45.493 に答える