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

时间:2010-08-17 06:33:05

标签: spring jpa junit4 transactional

我们在我们的应用程序中实现了JUnit4,它使用了Spring core&带有DB2的JPA。 我们需要测试一个完整的功能,它从一个数据库中检索数据并合并到另一个数据库中。

写入了从第一个数据库检索数据的测试用例,它正在运行而没有任何错误,但是记录没有存储到第二个数据库中。

实施

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

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

在应用程序中,我们有一个manager类来使用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()进行测试,它也可以正常工作。

请告知我们交易管理是否正确,或者解决此问题会有更大帮助。如果问题或环境不明确,请更新我。在此先感谢。!!

1 个答案:

答案 0 :(得分:6)

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

来自JavaDoc

  

测试注释以指示是否   不是注释的交易   测试方法应该回滚   测试方法完成后。   如果为true,则交易将是   回滚;否则,   交易将被提交。