Как установить путь сервлета для каждого запроса через 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")) 

работал для меня как шарм. Так что ответ в вопросе работает.

Другие вопросы по тегам