6

我们在我们的应用程序中实现了 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() 进行了测试,它也可以正常工作。

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

4

1 回答 1

6

你用@Rollback注释标记你的方法吗?

JavaDoc

测试注释以指示在测试方法完成后是否应回滚带注释的测试方法的事务。如果为真,则事务将回滚;否则,事务将被提交。

于 2010-08-17T11:07:18.820 回答