2017-01-17 79 views
1

我想從Square實現一個MockWebServer,並且我在代理之後。問題是,每次我執行我的測試時,測試都會失敗,因爲我對我的MockWebServer的每個請求都收到407。如何實現MockWebServer以使用代理

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

正如你看到我指着我的本地主機,我不知道爲什麼我得到這個!

這是我的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

好吧,我只是在最後figuered了....結果我okhttp3客戶端被指向真正的代理服務器,而不是模擬本地主機中的web服務器。我通過在我的okhttp3客戶端添加代理來解決這個問題,只有在測試Flavor時,然後將其添加到Retrofit2構建器。代碼看起來像這樣。

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是一樣的模擬Web服務器端口是很重要的。