У меня есть несколько интеграционных тестов для различных служб, расширяющих следующий базовый класс:
@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.REQUIRES_NEW
. Кажется, что эти транзакции не откатываются (потому что они являются вложенными транзакциями и, по-видимому, фиксируются во «внешней» транзакции?). «Внешняя» (уровень тестового примера) транзакция откатывается на по крайней мере, согласно журналам тестов. Совершенные транзакции испортили некоторые более поздние тесты, потому что они изменили тестовые данные.
Я могу обойти это, заставив тест повторно создавать и повторно заполнять базу данных между тестами, но мои вопрос, это ожидаемое поведение или я что-то делаю не так в своих тестах? Можно ли принудительно откатить вложенную транзакцию от тестового кода?