我现在希望通过单元测试来测试一个dubbo服务中的方法,但是此方法每次都会修改数据库中的数据,单元测试无法重复跑。
所以我想利用Spring-test来进行单元测试的自动回滚。我在Spring+MyBatis+MySQL的环境下,单元测试可以成功进行自动回滚。
可是当我在将修改数据库的方法修改为dubbo服务之后,单元测试就无法自动回滚数据了。
我自己的思考是这样的:
在单元测试执行的时候,单元测试明显花费了很长的时间来进行dubbo服务启动,说明,每次执行单元测试,都重新在ZooKeeper上注册了一个dubbo服务。
如果想要通过Spring-test进行数据的自动回滚,必须还在Spring的控制范围内,而dubbo服务已经脱离了Spring的控制范围,相当于在代码中调用一个远程服务,而远程服务如何修改数据库,是无法回滚的。
如果是这样的,还有没有其他方法能够实现对dubbo服务里的方法的单元测试?
附相关代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/spring-context.xml" })
@Transactional
public class ApplyFacadeTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ApplyFacade applyFacade; // dubbo方法
@Test
@Rollback(true)
public void testRevokeApply() {
RevokeApplyReqDTO reqDTO = new RevokeApplyReqDTO();
reqDTO.setApplyId(289L);
reqDTO.setUserId(2059L);
// 调用dubbo方法撤回订单
System.out.println(applyFacade.revokeApply(reqDTO, context));
System.out.println();
}
}
在spring的配置文件中,我建立了一个bean:
由于数据库使用了主从库的配置,dataSource配置的是主库。
回答