Что такое TestExecutionListeners и что они делают?

Насколько я понимаю, TestExecutionListeners действуют как методы @BeforeClass в JUnit. Я не понимаю, почему мне нужно использовать DependencyInjectionTestExecutionListener, TransactionalTestExecutionListener и DirtiesContextTestExecutionListener для использования DbUnitTestExecutionListener.

Обычно без DbUnit я могу создавать и заполнять базу данных. Почему вдруг мне нужно использовать этих слушателей, чтобы сделать некоторые CRUD для моей базы данных?

Ответ 1

TestExecutionListeners предоставляют различные типы функциональных возможностей для тестов, запущенных в Spring TestContext Framework.

Если вас интересует то, что делает конкретный слушатель, лучший способ узнать - прочитать Javadoc для соответствующего класса. Кроме того, в главе Тестирование справочного руководства Spring подробно рассказывается о том, как использовать каждого из слушателей и что они делают.

В вашем конкретном случае, если вы не используете @DirtiesContext, вам не нужно использовать DirtiesContextTestExecutionListener. Что касается DependencyInjectionTestExecutionListener и TransactionalTestExecutionListener, вам, скорее всего, понадобится, чтобы они ввели зависимости в ваш тест (например, через @Autowired, @Inject, @Resource и т.д.) И для транзакционных тестов (т.е. Тесты, аннотированные с помощью @Transactional).

Обратите внимание также, что вышеупомянутые слушатели включены по умолчанию. Поэтому, если вы используете Spring TestContext Framework без каких-либо пользовательских прослушивателей, таких как DbUnit, вы просто не понимали, что слушатели существуют. Раздел Конфигурация TestExecutionListener в справочном руководстве также должен помочь прояснить ситуацию. Обратите внимание, однако, что некоторые функции, такие как слияние и автоматическое обнаружение прослушивателей по умолчанию, доступны только в Spring Framework 4.1 +.

Привет,

Сэм (автор Spring TestContext Framework)