如何使用包含重定向的mockwebserver测试服务调用



我正在使用mockwebserver来模拟我的android应用程序的请求和响应。我正在测试一个通过一系列4个服务调用的登录功能。

    获取访问令牌
  1. 获取用户信息(不同的基础url)
  2. Get some other stuff (original base 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();
}

我的测试在重定向代码上失败。我无法登录。我在这里找到了一些提示,但我不完全明白是怎么回事,因此目前无法使其工作。

结果很简单。在进行重定向的调用中,创建一个新的模拟响应,响应代码为302,标头为location url。下一次调用将使用该location 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);

相关内容

  • 没有找到相关文章

最新更新