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

rak*_*sja 6 spring jpa transactional junit4

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

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

履行

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

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

在应用程序中,我们有一个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
Run Code Online (Sandbox Code Playgroud)

doSynch()被标记为NEVER,因为此时它不需要任何事务,并且在诸如CRUDHelper之类的更高级别中,事务可以被标记为REQUIRED以确保事务可用.

问题

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

从JSP调用时,Manager方法非常有效.我们还通过直接从测试用例调用txStore()进行测试,它也可以正常工作.

请告知我们交易管理是否不正确,或者解决这个问题会有更大的帮助.如果问题或环境不明确,请更新我.提前致谢.!!

Esp*_*pen 6

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

来自JavaDoc:

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