После создания ресурса в Spring REST Controller я возвращаю его местоположение в заголовке, как показано ниже.Unit Testing Заголовок «Location» контроллера Spring REST
@RequestMapping(..., method = RequestMethod.POST)
public ResponseEntity<Void> createResource(..., UriComponentsBuilder ucb) {
...
URI locationUri = ucb.path("/the/resources/")
.path(someId)
.build()
.toUri();
return ResponseEntity.created(locationUri).build();
}
В модульном тесте я проверяю его местоположение, как показано ниже.
@Test
public void testCreateResource(...) {
...
MockHttpServletRequestBuilder request = post("...")
.content(...)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON);
request.session(sessionMocked);
mvc.perform(request)
.andExpect(status().isCreated())
.andExpect(header().string("Location", "/the/resources" + id);
}
Этот результат не подходит для следующего сообщения.
java.lang.AssertionError: Response header Location expected:</the/resources/123456> but was:<http://localhost/the/resources/123456>
Похоже, я должен предоставить контекстную префикс http://localhost
для размещения заголовка в ожидании.
- Безопасно ли в контексте жесткого кода? Если да, то почему?
- Если нет, то каков правильный способ его правильной генерации для тестового примера?
Ваше решение проверяет поведение перенаправления. OP хотел, чтобы был проверен заголовок местоположения. Должен признаться, я не знал о 'redirectedUrlPattern' до сегодняшнего дня –