Spring Тесты интеграции с загрузкой: @AutoConfigureMockMvc и контекстное кэширование

Я создаю очень основное веб-приложение с помощью Spring Boot 1.5.1 и хотел создать интеграционные тесты для проверки конечных точек REST. Как рекомендовано документацией, MockMvc может быть использован для этого.

Вот очень простой тестовый класс:

package foo.bar.first;

import ...

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest1 {

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MockMvc mvc;

    @Test
    public void shouldStartWebApplicationContext() {
        assertThat(context).isNotNull();
    }

    @Test
    public void shouldReplyToPing() throws Exception {
        mvc.perform(get("/ping"))
                .andExpect(status().isOk());
    }
}

Как и ожидалось, он запускает полный контекст приложения и запускает тесты.

Позже я создал другие подобные тестовые классы и заметил, что бренд новый контекст приложения запущен для каждого тестового класса. Эксперименты показывают, что контекст используется только между тестовыми классами из одного пакета.

Например, если один и тот же тестовый класс копируется несколько раз, контексты выглядят следующим образом:

foo.bar
  first
    ApplicationTest1 (shared context)
    ApplicationTest2 (shared context)
  second
    ApplicationTest3 (brand new context)

Другие исследования показали, что он связан с аннотацией @AutoConfigureMockMvc. Если аннотации и связанные с MockMvc тестовые примеры удалены, то все три класса с успехом используют один и тот же контекст.

Итак, вопрос в том, как получить общий контекст для всех тестов с помощью MockMvc?

Примечание: другие ресурсы предлагают использовать MockMvcBuilders.webAppContextSetup(context).build() для получения экземпляра MockMvc, но он не работает для меня (он не включает фильтры при обработке веб-запросов).

Ответ 1

Кажется, это ошибка, представленная в Spring Boot 1.5: https://github.com/spring-projects/spring-boot/issues/9282

Вы можете попробовать перейти на Spring Boot 1.4.x или дождаться исправленной версии (планируется к следующей версии 1.5.5).

Обновление: Вместо "@AutoConfigureMockMvc" вы также можете вручную настроить MockMVC: https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/test-mockmvc.html

Ручная настройка MockMVC отлично сработала на моем проекте.
Что вы имеете в виду под "не включает фильтры при обработке веб-запросов"?