Интеграционное тестирование в Spring: аннотации Spring Testing, @Commit, @Rollback
@TestExecutionListeners
@TestExecutionListeners определяет метаданные уровня класса для настройки реализаций TestExecutionListener, которые должны быть зарегистрированы с помощью TestContextManager. Обычно @TestExecutionListeners используется вместе с @ContextConfiguration.
В следующем примере показано, как зарегистрировать две реализации TestExecutionListener:
@ContextConfiguration
@TestExecutionListeners({CustomTestExecutionListener.class, AnotherTestExecutionListener.class})
class CustomTestExecutionListenerTests {
// тело класса...
}
По умолчанию @TestExecutionListeners поддерживает унаследованных слушателей.
@Commit
@Commit указывает, что транзакция для метода тестирования транзакций должна быть зафиксирована после завершения метода тестирования. Вы можете использовать @Commit как прямую замену @Rollback(false), чтобы более явно передать намерение кода. Аналогично @Rollback, @Commit также может быть объявлен как аннотация на уровне класса или метода.
В следующем примере показано, как использовать аннотацию @Commit:
@Commit // Зафиксировать результат теста в базе данных.
@Test
void testProcessWithoutRollback() {
// ...
}
@Rollback
@Rollback указывает, следует ли откатить транзакцию для метода тестирования транзакций после завершения метода тестирования. Если значение true, транзакция откатывается. В противном случае транзакция фиксируется. Откат для интеграционных тестов в Spring TestContext Framework по умолчанию имеет значение true, даже если @Rollback явно не объявлен.
При объявлении аннотации уровня класса @Rollback определяет семантику отката по умолчанию для всех методов тестирования в иерархии классов тестов. При объявлении аннотации уровня метода @Rollback определяет семантику отката для конкретного метода тестирования, потенциально перекрывая семантику @Rollback или @Commit уровня класса.
В следующем примере не выполняется откат результата метода тестирования (то есть результат сохраняется в базе данных):
@Rollback(false) // Не откатывать результат.
@Test
void testProcessWithoutRollback() {
// ...
}
@BeforeTransaction
@BeforeTransaction указывает, что аннотированный void метод должен быть запущен перед запуском транзакции для тестовых методов, которые были настроены для запуска в транзакции с использованием аннотации Spring @Transactional. Методы @BeforeTransaction не обязательно должны быть общедоступными и могут быть объявлены в методах интерфейса на основе Java 8 по умолчанию.
В следующем примере показано, как использовать аннотацию @BeforeTransaction:
@BeforeTransaction // Запустить этот метод перед транзакцией.
void beforeTransaction() {
// логика для запуска перед запуском транзакции
}
@AfterTransaction
@AfterTransaction указывает, что аннотированный void метод должен запускаться после завершения транзакции для тестовых методов, которые были настроены для запуска в транзакции с использованием аннотации Spring @Transactional. Методы @AfterTransaction не обязательно должны быть общедоступными и могут быть объявлены в методах интерфейса на основе Java 8 по умолчанию.
@AfterTransaction // Запустить этот метод после транзакции.
void afterTransaction() {
// логика, запускаемая после завершения транзакции
}
Читайте также:
- Интеграционное тестирование в Spring: аннотации Spring Testing, @DirtiesContext
- Интеграционное тестирование в Spring: аннотации Spring Testing, @WebAppConfiguration, @ContextHierarchy
- Интеграционное тестирование в Spring: аннотации Spring Testing, @ActiveProfiles, @TestPropertySource, @DynamicPropertySource
Комментарии
Отправить комментарий