Как проверить сервисные вызовы с помощью mockwebserver, который содержит перенаправление?
Я использую mockwebserver, чтобы смоделировать запрос и ответ для моего приложения для Android. Я тестирую функцию входа в систему, которая проходит серию из 4 вызовов.
- Получить токен доступа
- Re-прямой
- Получить информацию о пользователе (другой базовый 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();
}
Мой тест не пройден при перенаправлении кода. Я не могу залогиниться. Я нашел некоторые подсказки здесь, но я не до конца понимаю, что происходит, поэтому не могу заставить его работать в данный момент.
1 ответ
Решение
Это оказалось довольно легко. В вызове, который выполняет перенаправление, создайте новый ложный ответ с кодом ответа 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);