记录UT错误解决

一、command line is too long

错误如图
UT错误
解决方法

解决方案

二、因为service初始化方法中执行了另一个私有方法去数据库获取配置赋值给一个私有变量,导致 NullPointerException 错误,初始化前mock没有找到可行方案

学习了反射之后解决了这个问题

@InjectMocks
private ClassB b; //ClassB中有全局变量 private ClassA a;
setUP(){
	ClassA a = new ClassA();
	// 给ClassA中的变量赋值或其他操作
	ReflectionTestUtils.setField(b,"a",a)
}

三、can not find lambda cache for this entity

这里报错的位置是被测试代码中获取实体类属性值时

someMapper.selectList(new QueryWrapper<ExamplePo>().lambda().orderByDesc(ExamplePo::getId));

错误信息
解决方法
在 Mockito.doReturn().when() 前加载一下表,比较推荐放在@Before

TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(),""), ExamplePo.Class); //加载ExamplePo
Mockito.doReturn(result).when(someMapper).selectList(Mockito.any()); //参数值应该与实际参数类型匹配一下

四、使用@SpringBootTest导致devops pipeline测试覆盖率为0

由于测试的接口使用了HttpServletRequest 以及redisService,原本的@ExtendWith(MockitoExtension.class)无法正常启动测试,查到需要改用@SpringBootTest注解
本地测试无误,覆盖率也正常,但是提交到devops流水线执行出来的覆盖率是0
做如下更改后测试正常启动且覆盖率恢复正常
在这里插入图片描述

五、junit赋值私有属性及调用私有方法

ClassA classA = new ClassA(); //测试classA
Field fieldA = classA.getClass().getDeclaredField("paramName");
fieldA.setAccessible(true);
fieldA.set(classA,"paramValue");

Method methodA = classA.getClass().getDeclaredMethod("methodName", MethodParamA.class);
methodA.setAccessible(true);
methodA.invoke(classA,methodParamA);

//私有方法举例,对应以上的示例
private void methodName(MethodParamA methodParamA) {}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值