gpt4 book ai didi

spring - 测试@TransactionalEvents和@Rollback

转载 作者:行者123 更新时间:2023-12-02 06:50:18 25 4
gpt4 key购买 nike

我一直在尝试使用我们现有的 Spring JUnit 测试(通过 @TransactionalTestExecutionListener 运行或子类化 AbstractTransactionalUnit4SpringContextTests 但是,似乎有一个被迫的选择 - 要么在没有 @Rollback 注释的情况下运行测试,要么事件不会触发。有没有人遇到过在能够进行 @Rollback 测试的同时测试 @TransactionalEvents 的好方法吗?

最佳答案

Stéphane Nicoll 是正确的:如果您的 @TransactionalEventListenerTransactionPhase 设置为 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 框架的作者)

关于spring - 测试@TransactionalEvents和@Rollback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com