Как откатить вложенные транзакции с помощью Propagation.REQUIRES_NEW в интеграционных тестах

У меня есть несколько интеграционных тестов для различных служб, расширяющих следующий базовый класс:

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

Я могу обойти это, заставив тест повторно создавать и повторно заполнять базу данных между тестами, но мои вопрос, это ожидаемое поведение или я что-то делаю не так в своих тестах? Можно ли принудительно откатить вложенную транзакцию от тестового кода?

20
задан esaj 3 March 2011 в 09:16
поделиться