测试上下文中未调用服务类的@Transactional

时间:2018-09-16 05:41:37

标签: java spring hibernate spring-test

我在DAO的服务类中使用Spring的@Transactional。该应用程序具有以XML(一个或多个)和通过诸如@Service之类的注释配置的bean。

我的测试用例配置如下:

@RunWith(SpringJunit4ClassRunner.class)
@ContextHierarchy({
    @ContextConfiguration(locations = {"classpath:spring/spring.xml"}),
    @ContextConfiguration(classes = {Service.class})
})
@ComponentScan(...)
public class TestRunner {
  @Autowired
  private Service service;

  @Test
  public void testSave() {
      service.save(...);
  }
}

我在XML中进行了以下配置:

<tx:annotation-driven transaction-manager="txmManager"/>
<!-- bean for hibernate5 transaction manager using sessionfactory -->

服务类如下:

@Service
public class Service {

   @Autowired
   private DAO dao;

   @Transactional
   public Entity save(Entity entity) {
       dao.save(entity);
   }
}

现在,所有这些在源上下文运行期间都可以正常运行,但是当我运行测试用例时,永远不会调用事务。 注意:调用Service.class的方法时没有NPE。

我进行了调整,发现如果在我的(测试)spring xml文件中为Service.class创建一个bean,测试用例将按预期工作,即,调用事务管理器,并在内存数据库中更新。

我希望SpringJunit4ClassRunner创建一个MergedContext,并且事务管理器配置会在Service#save调用时自动加入。

我对这里想念的内容有何想法?

休眠-5.2.6。最终版, 春天-4.2.0.RELEASE, 春季测试-4.1.6。发布

0 个答案:

没有答案