如何在JUnit中正确比较数值相等的Integer和Long类型以解决断言失败问题
问题分析与解决方案
根因说明
你使用的AssertJ断言中isEqualTo方法默认执行严格的对象相等校验,会同时比对值和类型:java.lang.Integer类型的1和java.lang.Long类型的1属于不同类型的对象,因此会判定不相等。
可行解决方案
方案1:统一转换为相同数值类型后比较(最推荐)
将两个值都强转为Number类型后获取long值再比较,不会丢失整数精度,适配绝大多数主键校验场景:
assertThat(((Number) poiList.get(0).get("id_pk")).longValue()) .isEqualTo(member.getId_pk());
方案2:使用AssertJ的数值专用比较方法
利用AssertJ针对可比较数值的专用匹配方法,仅比对数值大小、忽略类型差异:
assertThat((Number) poiList.get(0).get("id_pk")) .satisfies(num -> assertThat(num.longValue()).isEqualTo(member.getId_pk()));
方案3:转换为字符串比较(应急可用)
如果确认数值不存在前导零、小数位等干扰项,也可以转字符串后比对:
assertThat(poiList.get(0).get("id_pk").toString()) .isEqualTo(String.valueOf(member.getId_pk()));
内容的提问来源于stack exchange,提问作者ringhiosi
相关产品推荐
相关产品推荐

