Лучший способ сделать это:
- начать тест
- начать транзакцию
- (необязательно) загрузить любые данные БД, необходимые для тестаиспользуя что-то вроде DBUnit
- run test
- транзакция отката
Обратите внимание, что все операции с БД происходят в одной транзакции.Поскольку эта транзакция откатывается в конце теста (даже если генерируется исключение), база данных всегда должна быть в том же состоянии в конце теста, как и в начале.
Springпредоставляет некоторые действительно полезные классы, которые позаботятся о запуске и откате транзакции для каждого теста.Если вы используете Spring & JUnit4 и не возражаете против того, чтобы ваши тестовые классы должны были расширять класс Spring, возможно, самый простой вариант - расширить AbstractTransactionalJUnit4SpringContextTests
// Location of the Spring config file(s)
@ContextConfiguration(locations = {"/application-context-test.xml", "classpath*:/application-context-persistence-test.xml"})
// Transaction manager bean name
@TransactionConfiguration(transactionManager = "hsqlTransactionManager", defaultRollback = true)
@Transactional(propagation=Propagation.REQUIRES_NEW)
public class MyTransactionalTests extends AbstractTransactionalJUnit4SpringContextTests {
@Test
public void thisWillRunInATransactionThatIsAutomaticallyRolledBack() {}
}
Если вы не хотите расширятькласс Spring, вы можете настроить тест-бегун вместо того, чтобы использовать аннотации.Spring также поддерживает многие другие основные платформы модульного тестирования и более старые версии JUnit.