AssertionFailedError排查:createParcel测试返回null的原因分析
问题原因分析
Mapper实例或转换逻辑未正确生效
虽然其他方法里的Mapper调用正常,但createParcel用到的convertValue方法可能存在特殊情况:如果用@Spy注解让Mapper保留部分真实调用逻辑,那convertValue可能未被正确初始化;要是使用第三方Mapper(比如ModelMapper、MapStruct),测试环境里可能没配置好映射规则,或者缺少必要依赖,导致转换直接返回null。ParcelDTO与Parcel类的映射不兼容
convertValue转换失败返回null,大概率是字段匹配出了问题:- ParcelDTO的字段类型和Parcel类对应字段不兼容(比如DTO传字符串类型,实体类是Integer且未配置转换规则)
- Parcel类有私有构造方法,Mapper无法实例化对象
- 字段名不匹配且未添加映射注解(比如DTO叫
parcelCode,实体类叫code,没加@Mapping这类注解)
Mockito的Mock配置遗漏
如果你的Mapper是用@Mock注解注入的,那所有方法默认返回null,除非手动mock了方法的返回值。其他方法测试通过,说明那些方法的Mapper调用都做过mock,但createParcel里的convertValue忘了设置mock返回值,自然就返回null了。异常处理后的返回逻辑问题
你添加null判断后抛出自定义IllegalArgumentException,但测试代码里要么没捕获这个异常,要么服务类在抛出异常后没有返回预期的非null值(比如本该返回创建后的Parcel对象,结果因为异常直接返回null),最终触发了null ==> expected: not <null>的断言失败。
内容的提问来源于stack exchange,提问作者George Elizarov
相关产品推荐
相关产品推荐

