其他分享
首页 > 其他分享> > spring – 测试@TransactionalEvents和@Rollback

spring – 测试@TransactionalEvents和@Rollback

作者:互联网

我一直试图用我们现有的Spring JUnit测试来测试@TransactionalEvents(Spring 4.2 https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2的一个特性)(通过@TransactionalTestExecutionListener或子类化AbstractTransactionalUnit4SpringContextTests运行,但似乎有一个强制选择 – 要么运行测试而没有@Rollback注释,或者事件不会触发.有没有人能够在@Rollback测试时遇到测试@TransactionalEvents的好方法?

解决方法:

StéphaneNic​​oll是正确的:如果@TransactionalEventListener的TransactionPhase设置为AFTER_COMMIT,那么使用自动回滚语义进行事务测试没有任何意义,因为事件永远不会被触发.

换句话说,如果从未提交该事务,则无法在提交事务后触发事件.

因此,如果您真的希望触发事件,则必须提交事务(例如,通过使用@Commit注释您的测试方法).要在提交后进行清理,您应该能够在隔离模式下使用@Sql在事务提交后执行清理脚本.例如,类似以下内容(未经测试的代码)可能适合您:

@Transactional
@Commit
@Sql(scripts = "/cleanup.sql", executionPhase = AFTER_TEST_METHOD,
     config = @SqlConfig(transactionMode = TransactionMode.ISOLATED))
@Test
public void test() { /* ... */ }

问候,

Sam(Spring TestContext Framework的作者)

标签:spring-transactions,spring,junit,spring-test
来源: https://codeday.me/bug/20191008/1871816.html