我有一个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
考虑到服务层具有此注释的测试类。