我们在我们的应用程序中实现了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()进行测试,它也可以正常工作。
请告知我们交易管理是否正确,或者解决此问题会有更大帮助。如果问题或环境不明确,请更新我。在此先感谢。!!
答案 0 :(得分:6)