1

私はSquareからMockWebServerを実装しようとしています。私はプロキシの背後にいます。問題は、私がMockWebServerにやっているすべての要求に対して407を取得しているため、私が計測器テストを実行するたびに失敗するということです。プロキシで動作するMockWebServerの実装方法

debug.level.titleD/OkHttp: <-- 407 Proxy Authentication Required http://localhost:12345/user/login (767ms) 

私は自分のlocalhostを指していますが、私はなぜこれを取得しているのかわかりません!

ここに私のMockWebServerの実装があります!

public class MockedTestServer { 



private final int PORT = 12345; 
private final MockWebServer server; 
private int lastResponseCode; 
private String lastRequestPath; 

/** 
* Creates and starts a new server, with a non-default dispatcher 
* 
* @throws Exception 
*/ 
public MockedTestServer() throws Exception { 
    server = new MockWebServer(); 
    server.start(PORT); 
    setDispatcher(); 
} 

private void setDispatcher() { 
    final Dispatcher dispatcher = new Dispatcher() { 
     @Override 
     public MockResponse dispatch(final RecordedRequest request) throws InterruptedException { 
      try { 
       final String requestPath = request.getPath(); 

       final MockResponse response = new MockResponse().setResponseCode(200); 
       String filename; 


       // response for alerts 
       if (requestPath.equals(Constantes.ACTION_LOGIN)) { 
        filename = ConstantesJSON.LOGIN_OK; 

       } else { 
        // no response 
        lastResponseCode = 404; 
        return new MockResponse().setResponseCode(404); 
       } 
       lastResponseCode = 200; 
       response.setBody(RestServiceTestHelper.getStringFromFile(filename)); 
       lastRequestPath = requestPath; 
       return response; 
      } catch (final Exception e) { 
       throw new InterruptedException(e.getMessage()); 
      } 
     } 
    }; 
    server.setDispatcher(dispatcher); 
} 



public String getLastRequestPath() { 
    return lastRequestPath; 
} 

public String getUrl() { 
    return server.url("/").toString(); 
} 

public int getLastResponseCode() { 
    return lastResponseCode; 
} 


public void setDefaultDispatcher() { 
    server.setDispatcher(new QueueDispatcher()); 
} 


public void enqueueResponse(final MockResponse response) { 
    server.enqueue(response); 
} 

public void shutdownServer() throws IOException { 
    server.shutdown(); 
} 

インストルメンテーションテストを実行しているときのエンドポイントは「/」です。

この問題は、プロキシネットワークの背後にある場合にのみ発生します。モバイルデバイスでは、プロキシの背後にない別のネットワークに切り替えるとモックサーバーがうまく機能します。どのようなアイデアを私は間違っていますか?

編集: 私はプロキシの背後午前ときに呼ばれることは決してありませんディスパッチャ

答えて

1

[OK]を私はちょうど私のokhttp3クライアントはモックに真のプロキシサーバーを指すとされなかったという結果....最後に出てfiguered localhostのWebサーバー。私は、FlavorをテストしてRetrofit2ビルダーに追加するときだけ、自分のokhttp3クライアントにプロキシを追加することでこれを解決しました。コードは次のようになります。

if (BuildConfig.TEST_PROXY){ 
      try { 
       InetSocketAddress sock = new InetSocketAddress(InetAddress.getByName("localhost"),12345); 
       builderOkhttpClient.proxy(new Proxy(Proxy.Type.HTTP, sock)); 
      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } 
     } 

それは、ポートたInetSocketAddressを構築モックウェブサーバーポートと同じであることに注意することが重要です。

関連する問題