我在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。发布