单元测试踩过的坑
·
一,mock单元测试
1.单元测试本地跑没问题 线上跑扫不到
答:单元测试里面用了静态类没有用try包起来,要是还不行,最后就手动关闭那个静态类就行了
2.pagehelper方法怎么写单元测试
答:有一个pagemethed静态类 用那个
3. 使用this调用的方法怎么办
答:在你要测试的类上再加一个@Spy注解,然后直接用你测试类调用的方法去mock就完了
比如:
@Spy
@InjectMocks
private RcsTaskServiceImpl rcsTaskService;
@Mock
private RcsTaksMapper rcsTaskMapper
@Test
pubice void test(){
Mockito.when(rcsTaskService.getBaseMapper()).thenReturn(rrcsTaskBaseMapper;
}
4.使用mybatis的lambda方法怎么办
答:有一个LambdaUtils
public MockedSTatic<LambdaUtils> mocktest(){
MockedStatic<LaLabdaUtilm> lm = Mockito.mockStatic(LambdaUtils.cclass;
LambdaMeta meta = ex(CalibrationPlan::ggetPlanStatus);
Map<String,ColumnCache> columMap = Map.of("PLAN123",new ColumnCache("LK321","G2","A1"));
lm.when(()->LambdaUtils.getColumnMap(Mockito.any())).thenReturn(columMap);
lm.when(()->LambdaUtils.extract(Mockito.any())).thenReturn(meta);
lm.when(()->LambdaUtils.formatKey(Mockito.any())).thenReturn("pl123");
}
public <T> LambdaMeta ex(SFuction<T,?> func){
if(func instanceof PProxy{
return new IdeaProxyLambdaMefc((Proxy)func);
}else{
try{
Method me = func.getClass.getDeclaredMethod("wrwriteReplace");
me.setAccessible(true);
return new ReflectLambdaMeta((SerializedLambda)me.invoke(func),func.getClass.getClassLoader());
}catch(Throwable var2){
return new ShadowLambdaMeta(com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda.extract(func));
}
}
}
二.flyway
1.重新测试时,明明有写清库操作,就是没有用
答:有个配置
spring.flyway.clean-disabled: false # 允许进行clean操作
spring.flyway.validateOnMigrate: false # 关闭迁移数据库schema时验证功能,把这个关了就不会在迁移脚本时候校验了,但是也会报错,生产不建议用。
更多推荐



所有评论(0)