1

我有一个junit测试类,它的配置如下:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ WebContextTestExecutionListener.class,
        DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class })
@ActiveProfiles("test")
@DirtiesContext
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {
        SpringConfig.class, SpringTestingConfig.class,
        SpringLocalContainerJPAConfig.class, CustomConfiguration.class })

并且测试方法正在调用服务方法并且服务类@Transactional由于某种原因具有注释,当我为服务方法创建测试用例时它失败并给我异常org.hibernate.PersistentObjectException: detached entity passed to persist,如这篇文章中所示: org.hibernate.PersistentObjectException: detached entity pass to persist使用内存数据库中的 H2 并修复此异常,我必须使用注释对测试类进行注释,@Transactional尽管在托管 bean 中当我调用相同的代码时它工作正常,所以我的问题是为什么@Transactional有时在测试中需要以及何时我应该注释我的@Transactional考虑到服务层具有此注释的测试类。

4

0 回答 0