Bil*_*lly 5 spring spring-boot quarkus quarkus-panache
在 Spring Boot 中,我使用 @DirtiesContext 确保在每个测试用例之前清除数据库。
\nAFAIK Quarkus 没有 @DirtiesContext 注释。相反,建议使用@TestTransaction。这样,测试用例所做的更改将在测试用例结束时回滚。这对于单元测试来说效果很好。但是,我正在努力了解如何将其用于集成测试。
\n我的集成测试使用放心来对控制器进行休息调用。一方面,我不认为在控制器中使用 @TestTransaction 是个好主意。即使我这样做了,当其余调用返回时,数据也会被擦除。如果我在控制器中使用@Transaction,我将无法擦除下一个测试用例的数据库。
\n所以,我的问题是你们如何解决这个问题?在进行集成测试时,如何确保有一个干净的上下文。
\nSpring 似乎@DirtiesContext是:
\n\n测试注释表明与
\nApplicationContext测试相关的内容是脏的,因此应该关闭并从上下文缓存中删除。如果测试修改了上下文 \xe2\x80\x94(例如,通过修改单例 bean 的状态、修改嵌入式数据库的状态等),请使用此注释。请求相同上下文的后续测试将提供一个新的语境。
\n
这与通过回滚当前事务来清除数据库完全不同:这会破坏并重新创建整个 Spring 上下文。
\n使用 Quarkus 可以实现相同的效果@QuarkusTestProfile,此处描述为:
\n\n如果测试的配置文件与之前运行的测试不同,那么 Quarkus 将在运行测试之前关闭并使用新配置文件启动。这显然有点慢,因为它增加了测试时间的关闭/启动周期,但提供了很大的灵活性。
\n
然而,如果您需要的只是确保测试后回滚事务,那么您所需要做的就是使用 注释测试方法,而不是控制器io.quarkus.test.TestTransaction,如下所述:
\n\n您可以在测试中使用标准 Quarkus
\n@Transactional注释,但这意味着您的测试对数据库所做的更改将是持久的。如果您希望在测试结束时回滚所做的任何更改,您可以使用注释io.quarkus.test.TestTransaction。这将在事务中运行测试方法,但在测试方法完成后回滚以恢复任何数据库更改。
您的应用程序代码将在测试方法启动的事务中运行,执行您可以在测试方法中测试的操作,最后回滚以擦除参与事务的任何持久状态。这有一些缺陷:(1) 如果您的逻辑在某个时刻启动一个新事务,则不会自动回滚。(2) 如果你的逻辑改变了某种不参与事务的状态,这个改变不会被回滚。
\n| 归档时间: |
|
| 查看次数: |
2571 次 |
| 最近记录: |