针对类似效用方法的集合和映射的不同覆盖率统计信息

时间:2017-04-06 19:50:37

标签: java unit-testing set jacoco jacoco-maven-plugin

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

被测试类的代码如下:

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%的覆盖率。请参考下图 - enter image description here

我尝试添加以下语句 -

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

1 个答案:

答案 0 :(得分:1)

正如https://github.com/jacoco/jacoco/issues/516中所解释的那样:还有另一个间接调用方法isNotNullOrEmpty(Map map)的测试。