Нужно ли создавать новый MockMvc для каждого теста?

Я пытаюсь добавить Cucumber в свой проект Spring Web MVC, который уже использует spring-test и JUnit. Уже написанные мной интеграционные тесты, отличные от Cucumber, автоматически подключаются к WebApplicationContext, а затем создаются MockMvc за каждый тест. Пример огурца, который я пытаюсь работать с инъекциями MockMvc один раз за время существования класса определения шага.

Документы API для MockMVC не дают никаких советов о том, как вызывать perform модифицирует MockMvc экземпляр, и допустимо ли повторно использовать MockMvc экземпляр для нескольких тестов. Я также не смог найти определенный ответ в справочных документах.

Что такое контракт с MockMvc? Должен ли я создавать новый для каждого теста?

2 ответа

Решение

Посмотрите на переменные экземпляра MockMvc и вы сможете вывести ответ.

static String MVC_RESULT_ATTRIBUTE = MockMvc.class.getName().concat(".MVC_RESULT_ATTRIBUTE");

private final TestDispatcherServlet servlet;

private final Filter[] filters;

private final ServletContext servletContext;

private RequestBuilder defaultRequestBuilder;

private List<ResultMatcher> defaultResultMatchers = new ArrayList<ResultMatcher>();

private List<ResultHandler> defaultResultHandlers = new ArrayList<ResultHandler>();

Переменные экземпляра / класса MVC_RESULT_ATTRIBUTE а также TestDispatcherServlet потокобезопасны и filters а также servletContext устанавливаются только во время инициализации.filters а также servletContext должен быть потокобезопасным и без сохранения состояния тоже. defaultRequestBuilder, defaultResultMatchers а также defaultResultHandlers есть метод установки. С технической точки зрения MockMvc не является потокобезопасным и не должен использоваться повторно. Эти сеттеры являются частным пакетом и MockMvc экземпляр можно приобрести только через MockMvcBuilders, Следовательно, вы не можете манипулировать MockMvc затем, чтобы его можно было повторно использовать в нескольких тестах.

MockMvc может быть создан один раз и использоваться для любого количества запросов.

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