看来春天@DirtiesContext
是一个:
指示ApplicationContext
与测试关联的测试注释是脏的,因此应该关闭并从上下文缓存中删除。
如果测试修改了上下文,则使用此注解——例如,通过修改单例 bean 的状态、修改嵌入式数据库的状态等。请求相同上下文的后续测试将提供一个新上下文。
这与通过回滚当前事务来清除数据库完全不同:这会破坏并重新创建整个 Spring 上下文。
使用 Quarkus 可以实现相同的效果,此处@QuarkusTestProfile
描述为:
如果测试具有与先前运行的测试不同的配置文件,则 Quarkus 将在运行测试之前关闭并使用新配置文件启动。这显然有点慢,因为它增加了测试时间的关闭/启动周期,但提供了很大的灵活性。
但是,如果您只需要确保事务在测试后回滚,那么您需要做的就是用 注释测试方法,而不是控制器,io.quarkus.test.TestTransaction
如下所述:
您可以在测试中使用标准 Quarkus@Transactional
注释,但这意味着您的测试对数据库所做的更改将是持久的。如果您希望在测试结束时回滚所做的任何更改,您可以使用io.quarkus.test.TestTransaction
注释。这将在事务中运行测试方法,但在测试方法完成后回滚以恢复任何数据库更改。
您的应用程序代码将在由测试方法启动的事务中运行,然后执行您可以在测试方法中测试的事情,最后回滚以擦除参与事务的任何持久状态。这有一些缺陷:(1)如果在某个时候你的逻辑开始一个新事务,这不会自动回滚。(2) 如果你的逻辑改变了某种不参与事务的状态,这个改变不会回滚。