1、where块使用@Shared变量踩坑
场景描述
where块中使用了@Shared变量,变量在setup()中初始化
debug时发现图中位置1的createParam.vin与位置2中的createParam.vin拿到的值不一致,2中的vin值为上一个feature运行后的createParam.vin,查看官方文档并未说明where块的执行顺序,从结果中推断stepup()在where块之后运行

解决方法
- where中不使用createParam参数,createParam.vin替代为"TESTVIN$uuid",uuid必须定义为@Shared变量,全局变量且值唯一
- 拆成不同的feature method
2、setupSpec()中调用mapper.insertSelective()方法报错:
java.lang.NullPointerException: Cannot invoke method insertSelective() on null object
代码如下:
@Autowired
VinQueryRecordMapper vinQueryRecordMapper//注入mapper
//调用mapper将DO插入数据库
void insert(int i, String prefix, String productCode) {
i.times {
VinQueryRecordDO vinQueryRecordDO = new VinQueryRecordDO(
requestId: "test$prefix" + it,
vin: "test$prefix" + it,
shortVin: StringUtils.right("test$prefix" + it, 4),
operator: "test$prefix" + it,
status: QueryRecordStatus.PROCESSING.getCode()
)
vinQueryRecordMapper.insertSelective(vinQueryRecordDO) //运行后这行报错
}
}
//调用上面定义的insert方法
def setupSpec() {
insert(10, 'BX', 'INSURANCE')
insert(3, 'WB', 'MAINTAIN')
insert(1, 'WZ', 'VIOLATION')
insert(2, 'VM', 'VINPARSE')
}分析:setupSpec()运行时未注入mapper实例
解决:setupSpec()改成setup()
3、Mock 用注解方式的dubbo服务时未生效
场景:
接口:GPSOrderAppFacade
实现类:GPSOrderQueryFacadeImpl
需要mock的dubbo服务:IovWorkService
说明:测试类GPSOrderQueryFacadeTest调用gpsOrderQueryFacade.query()方法,query()方法内调用了dubbo服务IovWorkService
被调用的服务:

测试类:

解决:
new GPSOrderQueryFacadeImpl实例,把GPSOrderQueryFacadeImpl里面用到的所有依赖都替换进去,需要注意的是原来的@Autowired注解需要去掉,这样调用gpsOrderQueryFacade.query()方法时用的就是替换后的mock服务了

版权声明:本文为mmdxgj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。