如何使用包含重定向的 mockwebserver 测试服务调用?
How to test service calls using mockwebserver that contains redirection?
我正在使用 mockwebserver 模拟我的 android 应用程序的请求和响应。我正在测试通过一系列 4 次服务调用的登录功能。
- 获取访问令牌
- 重定向
- 获取用户信息(不同基数url)
- 得到一些其他东西(原始基础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 但我不完全理解发生了什么,因此目前无法使其工作。
事实证明这很容易。在进行重定向的调用中,使用响应代码 302 和 header 以及位置 url 创建一个新的模拟响应。下一次调用将使用该位置 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);
我正在使用 mockwebserver 模拟我的 android 应用程序的请求和响应。我正在测试通过一系列 4 次服务调用的登录功能。
- 获取访问令牌
- 重定向
- 获取用户信息(不同基数url)
- 得到一些其他东西(原始基础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 但我不完全理解发生了什么,因此目前无法使其工作。
事实证明这很容易。在进行重定向的调用中,使用响应代码 302 和 header 以及位置 url 创建一个新的模拟响应。下一次调用将使用该位置 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);