gpt4 book ai didi

spring - junit 测试用例事务未提交 - 没有错误

转载 作者:行者123 更新时间:2023-12-02 09:54:17 25 4
gpt4 key购买 nike

我们已经在我们的应用程序中实现了 JUnit4,该应用程序使用 Spring 核心和 JPA 以及 DB2。我们需要测试从一个数据库检索数据并将数据合并到另一个数据库的完整功能。

编写了从第一个数据库检索数据的测试用例,并且运行完美,没有任何错误,但记录没有存储到第二个数据库中。

实现

我们在 TestCase 类中包含了以下注释,以便在必要时使测试用例在事务下运行,

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class})
@ContextConfiguration(locations={""})
@TransactionConfiguration(transactionManager="defaultTransactionManager", defaultRollback=false)
@Transactional

在应用程序中,我们有一个管理器类来使用 doSynch() 方法执行此操作。从该方法中,将调用 crudHelper 类的 txStore() 方法来初始化并调用 doStore() 方法(在同一类中)将实体合并到数据库。

以下是整个测试用例逻辑的事务声明

TestCase testSynch() - @Transactional(propagation=Propagation.SUPPORTS)
Manager doSynch() - @Transactional(propagation=Propagation.NEVER)
CRUDHelper txStore() - @Transactional(propagation=Propagation.REQUIRED)
doStore() - No Transactional annotation

doSynch() 被标记为 NEVER,因为此时它不需要任何事务,并且在进一步的级别(例如在 CRUDHelper 中)可以将事务标记为 REQUIRED 以确保事务可用。

问题

这里,当我们运行调用 Manager 的 doSynch() 方法来测试功能的测试用例时,除了记录未合并且没有抛出错误之外,完整的流程工作正常。

从 JSP 调用 Manager 方法效果很好。我们还通过直接从测试用例调用 txStore() 进行了测试,它也工作正常。

请告诉我们事务管理是否不当,或者解决此问题会有更大帮助。如果问题或环境不清楚,也请更新我。提前致谢。!!

最佳答案

您是否使用@Rollback注释标记您的方法?

来自JavaDoc :

Test annotation to indicate whether or not the transaction for the annotated test method should be rolled back after the test method has completed. If true, the transaction will be rolled back; otherwise, the transaction will be committed.

关于spring - junit 测试用例事务未提交 - 没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3499857/

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