Как отключить контекст приложения между тестами - PullRequest
0 голосов
/ 30 апреля 2018

У меня 3 группы тестов: юнит, интеграция, приемка.

  • Последние две группы запускают ApplicationContext: минимальный для «интеграции» и полный для «принятия».
  • В обоих контекстах приложения регистрируется очередь подписчика.
  • Контексты приложения отменяются в конце всего теста (@RunWith(SpringRunner.class))

Когда я запускаю «все тесты», запускаются 2 разных контекста приложения, и у меня дублируются подписчики очереди.

Я знаю следующие обходные пути для этого дублирования подписчиков:

  • никогда не запускать интеграцию и приемочные испытания вместе
  • использовать прикладной контекст «приемка» для «интеграционных» тестов. Недостаток: тестовый запуск займет больше времени.
  • добавить статический реестр и вручную добавить / удалить слушателей. Недостаток: слишком сложный и легко забываемый

Есть ли какой-нибудь удобный способ выгрузить контекст приложения после группы тестов?

ОБНОВЛЕНИЕ на основе ndrone ответ

  • @DirtiesContext идеально подходит
  • еще один вариант - ограничить число кэшированных ApplicationContexts одним с spring.test.context.cache.maxSize=1

Пример тестового суперкласса с контекстом грязи

    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
    @TestExecutionListeners({FlywayTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class})
    @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
    public abstract class AcceptanceTest {}
...