2016-09-27 56 views
0

我正在使用mockwebserver来模拟我的android应用程序的请求和响应。我正在测试通过一系列4次服务调用的登录功能。如何使用包含重定向的mockwebserver测试服务调用?

  1. 获得访问令牌
  2. 再直接
  3. 获取用户信息(不同的基本URL)
  4. 得到一些其他的东西(原基本URL)

我想嘲笑重定向呼叫的响应。这里是我的代码:

@Test 
public void testSuccessfulLogin() throws Exception { 
    // Post 
    server.enqueue(new MockResponse() 
      .setResponseCode(HTTP_OK) 
      .setBody(getStringFromFile(getInstrumentation().getContext(), "access_token.json"))); 

    // Redirect 
    server.enqueue(new MockResponse().setResponseCode(HTTP_MOVED_TEMP)); 

    // GET user info 
    server.enqueue(new MockResponse().setResponseCode(HTTP_OK).setBody(getStringFromFile(getInstrumentation().getContext(), "userinfo.json"))); 

    // GET some other stuff 
    server.enqueue(new MockResponse().setResponseCode(HTTP_OK) 
      .setBody(getStringFromFile(getInstrumentation().getContext(), "sts.json"))); 

    // Init call 
    loginWithoutWaiting(Data.serviceLoginUsername, Data.serviceLoginPassword); 

    // Debug (need to loop 4 times to get all 4 call paths) 
    RecordedRequest request = server.takeRequest(); 
    request.getPath(); 
} 

我的测试在重定向代码失败。我不能登入。我发现了一些提示here,但我不完全理解发生了什么,因此目前无法使其工作。

回答

0

原来很简单。在进行重定向的调用中,创建一个新的模拟响应,其中包含响应代码302和包含位置url的标头。下一个电话将使用该位置的网址。

case "/userinfo": 
return new MockResponse().setResponseCode(HTTP_MOVED_TEMP).setHeader("Location", "/api-test.com/users"); 

case "/api-test.com/users": 
return new MockResponse().setBody("{}")).setResponseCode(HTTP_OK); 
相关问题