我正在使用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%的覆盖率。请参考下图 -
我尝试添加以下语句 -
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-M4
和junit-jupiter-engine:5.0.0-M4
。
答案 0 :(得分:1)
正如https://github.com/jacoco/jacoco/issues/516中所解释的那样:还有另一个间接调用方法isNotNullOrEmpty(Map map)
的测试。