【发布时间】:2011-03-30 19:34:39
【问题描述】:
我们在我们的应用程序中实现了 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() 进行了测试,它也可以正常工作。
请让我们知道事务管理是否不正确,或者解决此问题会有更大的帮助。如果问题或环境不清楚,请更新我。提前致谢!!
【问题讨论】:
标签: spring jpa junit4 transactional