有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在使用Cobertura时忽略与记录器相关的If条件?

我正在尝试使用Cobertura增加JUnit测试用例的覆盖率

代码中有相当多的日志记录程序,以及检查是否启用了Info或Debug的条件。例:

if (LOGGER.isInfoEnabled()) {
    LOGGER.info("Some info...");
}

现在很明显,这将没有其他部分。上述代码将有50%的分支覆盖率。我怎样才能做到100%

我已尝试忽略检测中的记录器调用:

<instrumentation>
    <ignores>
        <ignore>org.slf4j.Logger.*</ignore>
    </ignores>
    <excludes>
        <exclude>**/Example.class</exclude>
    </excludes>
</instrumentation>

但这只是把覆盖率降到了0%

有解决办法吗

任何帮助都将不胜感激


共 (2) 个答案

  1. # 1 楼答案

    看起来您正在使用SLF4J—因此最简单的方法是删除这些保护子句,因为您可以使用参数化日志记录

    IntelliJ IDEA将为您转换为此-菜单>;分析>;按名称运行Inspection==“非常量字符串连接作为日志调用的参数”),并为找到的字符串提供快速修复。 见http://www.slf4j.org/faq.html#logging_performance

  2. # 2 楼答案

    你的配置

    <ignore>org.slf4j.Logger.*</ignore>
    

    失败了。 使用

    <ignore>org.slf4j.*</ignore>
    

    并删除排除配置