Предположим, что я сделал простой клиент в своем приложении, который использует удаленную веб-службу, которая подвергает RESTful API некоторому URI /foo/bar/{baz}
. Теперь я хочу unit test мой клиент, который делает вызовы этой веб-службы.
В идеале, в моих тестах, Id хотел бы издеваться над ответами, которые я получаю от веб-службы, учитывая конкретный запрос, например /foo/bar/123
или /foo/bar/42
. Мой клиент предполагает, что API на самом деле работает где-то, поэтому мне нужен локальный "веб-сервис" для запуска на http://localhost:9090/foo/bar
для моих тестов.
Я хочу, чтобы мои модульные тесты были автономными, аналогично тестированию контроллеров Spring с помощью Spring MVC Test framework.
Некоторые псевдокоды для простого клиента, выборки из удаленного API:
// Initialization logic involving setting up mocking of remote API at
// http://localhost:9090/foo/bar
@Autowired
NumberClient numberClient // calls the API at http://localhost:9090/foo/bar
@Test
public void getNumber42() {
onRequest(mockAPI.get("/foo/bar/42")).thenRespond("{ \"number\" : 42 }");
assertEquals(42, numberClient.getNumber(42));
}
// ..
Каковы мои альтернативы, используя Spring?