У меня есть несколько тестов интеграции для различных служб, которые расширяют следующий базовый класс:
@ContextConfiguration(locations="classpath:applicationContext-test.xml")
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
@Transactional
public abstract class IntegrationTestBase extends AbstractTransactionalJUnit4SpringContextTests
{
//Some setup, filling test data to a HSQLDB-database etc
}
В большинстве случаев это работает нормально, но у меня есть класс сервиса, который имеет транзакции, определенные с помощью propagation=Propagation.REQUIRES_NEW
. Кажется, что эти транзакции не откатываются (потому что они являются вложенными транзакциями и, по-видимому, совершают транзакции "внешние"?). Операция "внешний" (тестовый уровень) откатывается, по крайней мере, согласно тестовым журналам. Собранные транзакции испортили некоторые более поздние тесты, поскольку они изменили тестовые данные.
Я могу обойти это, заставив тест повторно создать и повторно заполнить базу данных между тестами, но мой вопрос: это ожидаемое поведение, или я что-то не так в моих тестах? Может ли вложенная транзакция принудительно откатиться от тестового кода?