【发布时间】:2011-07-07 21:56:59
【问题描述】:
我有几个针对扩展以下基类的各种服务的集成测试:
@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 定义的事务。似乎这些事务没有回滚(因为它们是嵌套事务并且显然是在“外部”事务中提交的?)。至少根据测试日志,“外部”(测试用例级别)事务被回滚。提交的事务搞砸了一些后来的测试,因为它们改变了测试数据。
我可以通过强制测试在测试之间重新创建和重新填充数据库来解决这个问题,但我的问题是,这是预期的行为还是我在测试中做错了什么?嵌套事务能否从测试代码强制回滚?
【问题讨论】:
标签: hibernate spring transactions integration-testing rollback