Интеграционное тестирование в 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() {
    // логика, запускаемая после завершения транзакции
}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки