как запускать нестатические посттесты с JUnit и SpringRunner

#spring #junit #integration-testing

#spring #junit #интеграция-тестирование

Вопрос:

У нас есть несколько методов в производственном коде, аннотированных с помощью @Transaction(propagation = REQUIRES_NEW) . Таким образом, аннотирование тестового класса с помощью @Transactional / @Rollback по-прежнему приводит к загрязнению базы данных. Я хотел бы иметь метод, который мог бы удалять записи из соответствующих таблиц после завершения ВСЕХ тестов этого класса. Однако @AfterClass метод обязательно должен быть статическим, так как я мог бы получить доступ к моему предоставленному Spring EntityManager и / или хранилищам данных Spring. Решение, которое мы используем в данный момент, заключается в аннотировании тестового класса с помощью @DirtiesContext(mode=AFTER_CLASS) однако это приводит к действительно болезненным последствиям, если вы забываете также переопределить URL источника данных для этого тестового класса.

Итак, можно ли этого достичь более идиоматичным способом Spring / JUnit?

Ответ №1:

У меня есть набор регрессионных тестов, который работает в средах контроля качества. Поскольку он выполняет приложение, по самой своей природе он изменяет базу данных. Для этих тестов у меня есть определенные пользователи тестирования, и каждый тест создает любые записи, от которых он зависит. Во время этой настройки и во время выполнения тестов все созданные записи базы данных отслеживаются в локальной коллекции. В конце теста, то есть во время метода очистки, записи удаляются из базы данных. Я также использую имя и идентификатор тестового запуска, который позволяет легко отличить эти записи от реальных данных в случае каких-либо проблем с очисткой. Не уверен, что это соответствовало бы вашему представлению об идиоматическом Spring / JUnit, но это работает для нас и обеспечивает достаточную чистоту данных нашей среды контроля качества.

Комментарии:

1. выполняется ли этот метод очистки после каждого теста? Если бы я был доволен @After , я бы не стал утруждать себя публикацией вопроса. Я ищу что-то, что запускается после всех тестов в классе, но может быть нестатическим

2. Вы смотрели на DBUnit? Это расширение Junit для управления состоянием базы данных для тестов.