JUnit 测试始终回滚事务

2022-09-01 08:01:58

我正在运行一个简单的JUnit测试,再次测试一个应用程序DAO。问题是我总是得到:

javax.persistence.RollbackException: Transaction marked as rollbackOnly

JUnit 测试是:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@Transactional
public class PerformanceTest {

    @Test
    @Transactional(propagation= Propagation.REQUIRES_NEW)
    @Rollback(false)
    public void testMsisdnCreationPerformance() {
        // Create a JPA entity

        // Persist JPA entity
    }
}

如您所见,我明确声明不回滚此方法。

Spring JUnit 支持是否始终将回滚设置为 true?


答案 1

它应该像你期望的那样工作,但可能是你在被测试的类中打开了另一个事务,或者你在某个地方有其他功能/或错误。

顺便说一句,这个注释应该是enougth:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@Transactional
public class PerformanceTest {

    @Test
    @Rollback(false)
    public void testMsisdnCreationPerformance() {
        // Create a JPA entity

        // Persist JPA entity
    }
}

@See春季参考第9.3.5.4章 事务管理(或当前版本))


答案 2

只需添加注释回滚并将标志设置为 false。

   @Test
   @Rollback(false)

推荐