Как установить путь сервлета для каждого запроса через MockMvc
Можно ли установить путь сервлета для всех запросов (получить, опубликовать, положить, удалить), которые проходят через MockMvc?
Сервлет Spring отправляется в /rest/*, но в моем тесте я должен удалить часть / rest в URL, иначе Spring тест не распознает контроллер.
РЕДАКТИРОВАТЬ
@Sotirios:
Возможно что-то вроде:
public class MyWebTests {
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = standaloneSetup(new AccountController())
.defaultRequest(get("/")
.contextPath("/app").servletPath("/main")
.accept(MediaType.APPLICATION_JSON).build();
}}
Но мне интересно, как можно задать путь сервлета для всех запросов. Выше приведен код http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html.
Или это возможно только для определения servletPath с standaloneSetup?
1 ответ
У меня были проблемы с ServletException("путь кругового обзора..."), который возникал только в реальном развертывании, но никогда в наших тестах с MockMvc.
Проблема заключалась в том, что метод не был аннотирован @ResponseBody. Тест работал нормально, так как был пустой путь сервлета, поэтому он разрешил viewName в 'servletPath/callPath', который отличался от 'callPath', поэтому он не выдавал исключение ServletException. Следовательно, мне нужно было установить servletPath для тестовых запросов, чтобы приблизиться к тому, как развертывается приложение, и чтобы наши тесты не выполнялись в случае, если кто-то забудет аннотацию.
.defaultRequest(get("/").servletPath("/main"))
работал для меня как шарм. Так что ответ в вопросе работает.