You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Comparator比较方法Jacoco代码覆盖率无法达到100%问题排查

自定义Comparator Jacoco覆盖率未达100%问题
  • 已完成自定义Comparator比较器及对应单元测试编写,无论怎么调整代码都无法实现100%代码覆盖率
  • 虽然未达100%覆盖率不影响代码实际使用,仍希望定位问题根因
  • 已尝试Stack Overflow同类问题给出的两种解决方案:将比较器的条件判断代码拆分为多行编写、使用&运算符替换&&运算符,两种方案均未生效

相关代码与材料

  • 最初拆分多行的条件判断代码:
if (e1.getLastUpdateDateTime() == null 
&& e2.getLastUpdateDateTime() == null) 
return 0;
  • 单元测试方法与比较器原始实现:
@Test
public void testCompare() {
    SomeObject m1 = new SomeObject();
    m1.setSomeVariable("a");
    m1.setLastUpdateDateTime(null);
    SomeObject m2 = new SomeObject();
    m2.setSomeVariable("b");
    m2.setLastUpdateDateTime(null);
    assertEquals(0, SomeUtil.compare(m1, m2));

    m1 = new SomeObject();
    m1.setSomeVariable("a");
    m1.setLastUpdateDateTime(null);
    m2 = new SomeObject();
    m2.setSomeVariable("b");
    m2.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:02"));
    assertEquals(1, SomeUtil.compare(m1, m2));

    m1 = new SomeObject();
    m1.setSomeVariable("a");
    m1.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:02"));
    m2 = new SomeObject();
    m2.setSomeVariable("b");
    m2.setLastUpdateDateTime(null);
    assertEquals(-1, SomeUtil.compare(m1, m2));

    m1 = new SomeObject();
    m1.setSomeVariable("a");
    m1.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:02"));
    m2 = new SomeObject();
    m2.setSomeVariable("b");
    m2.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:02"));
    assertEquals(0, SomeUtil.compare(m1, m2));

    m1 = new SomeObject();
    m1.setSomeVariable("a");
    m1.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:02"));
    m2 = new SomeObject();
    m2.setSomeVariable("b");
    m2.setLastUpdateDateTime(getXMLGregorianCalendar("2022-01-01 00:00:01"));
    assertEquals(-1, SomeUtil.compare(m1, m2));

    List<SomeObject> SomeObjectList = TestUtil.getSomeObjectListForComparator();
    SomeObject SomeObject = SomeObjectList.stream().sorted(SomeUtil::compare).findFirst().get();
    assertEquals("b", SomeObject.getSomeVariable());
}

public static int compare(SomeObject e1, SomeObject e2) {
    if (e1.getLastUpdateDateTime() == null && e2.getLastUpdateDateTime() == null) return 0;
    if (e1.getLastUpdateDateTime() == null && e2.getLastUpdateDateTime() != null) return 1;
    if (e1.getLastUpdateDateTime() != null && e2.getLastUpdateDateTime() == null) return -1;
    return e2.getLastUpdateDateTime().compare(e1.getLastUpdateDateTime());
}
  • Jacoco代码覆盖率截图:
    Jacoco Code Coverage
    覆盖率详情
  • 根据社区建议重写的三元运算符版本比较器:
public static int compare(SomeObject e1, SomeObject e2) {
    return e1.getLastUpdateDateTime() == null
            ? (e2.getLastUpdateDateTime() == null ? 0 : 1)
            : (e2.getLastUpdateDateTime() == null ? -1 : e2.getLastUpdateDateTime().compare(e1.getLastUpdateDateTime()));
}

内容的提问来源于stack exchange,提问作者Sammy Pawar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:27:14