类似实用方法的 Set 和 Map 的不同覆盖率统计

Different coverage statistics for Set and Map for similar utility methods

我正在使用 jacoco-maven-plugin:0.7.8 查找我们代码中的代码覆盖率。

被测class代码如下:

public class Utils {

    public static boolean isNotNullOrEmpty(Map map) {
        return map != null && !map.isEmpty();
    }

    public static boolean isNotNullOrEmpty(Set set) {
        return set != null && !set.isEmpty();
    }
}

为此我编写了如下单元测试 -

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class UtilsTest {

    @Test
    void testUtils() {
        assertNotNull(new Utils());
        assertFalse(Utils.isNotNullOrEmpty(new HashMap()), "Map utils failure.");
        assertFalse(Utils.isNotNullOrEmpty(new HashSet()), "Set utils failure.");
    }
}

现在,当这些测试成功执行后,我最终获得 isNotNullOrEmpty(Set set) 的 50% 覆盖率,而 isNotNullOrEmpty(Map map) 的覆盖率为 100%。请参考下图 -

我尝试添加如下语句 -

Set<String> nullSet = null;
assertFalse(Utils.isNotNullOrEmpty(nullSet), "Set utils failure.");

但这会产生相同的覆盖率。

为什么会这样,如何解决?

如果需要,我将使用 junit-jupiter-api:5.0.0-M4 以及 junit-platform-surefire-provider:1.0.0-M4junit-jupiter-engine:5.0.0-M4

https://github.com/jacoco/jacoco/issues/516 中所述:还有另一个测试间接调用方法 isNotNullOrEmpty(Map map)