我有一个服务类的服务方法,它是一个Spring bean,看起来像
@Transactional
public void doThis() {
dao.d1();
dao.d2();
}
在我的DAO类中,它扩展了Spring的NamedParameterJdbcDaoSupport。我把它设置为
@Transactional(propagation = Propagation.MANDATORY)
public void d1(){...}
@Transactional(propagation = Propagation.MANDATORY)
public void d2(){...}
,配置如下
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
现在我的问题是,如何在Spring上下文中集成测试?我用AbstractTransactionalJUnit4SpringContextTests和一个嵌入式数据库测试了我的DAO。我现在如何测试服务链和DAO,如果dao抛出RuntimeException,我可以看到整个事务被回滚?
希望我能解释清楚。欢迎任何提示/建议
答案 0 :(得分:0)
如果没有检测代码来测试此事务案例,可能很难将其转换为简单的可重复JUnit测试。
在dao中添加一些额外的代码,你可以让你的d2方法寻找强制它抛出测试RuntimeException的东西。也许ThreadLocal标志可用于表示您希望代码失败。
或者,您可以每次都使d2()失败,直到您觉得正确应用事务语义为止。
答案 1 :(得分:0)
我实际上只是用AbstractTransactionalJUnit4SpringContextTests和嵌入式数据库测试它,因为我会测试我的DAO。只需在故事中添加服务层,以及在下游触发的方法中抛出RuntimeException的DAO存根。它工作正常。验证事务回滚