【问题标题】:How to ignore Logger related If conditions while using Cobertura?使用 Cobertura 时如何忽略与 Logger 相关的 If 条件?
【发布时间】:2016-02-17 12:15:18
【问题描述】:

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

代码中有相当多的Logger,还有If条件来检查是否启用了Info或Debug。例如:

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

现在显然,不会有 Else 部分。上面的代码将有 50% 的分支覆盖率。我如何做到这一点 100%?

我已经尝试在检测中忽略 Logger 调用:

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

但这只是将覆盖率降低到 0%。

有解决办法吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: java logging junit cobertura maven-cobertura-plugin


    【解决方案1】:

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

    IntelliJ IDEA 将为您转换为此 - Menu>Analyze>Run Inspection By Name == "Non-Constant String concatenation as argument to logging call" ) 并为它找到的那些提供快速修复。 见http://www.slf4j.org/faq.html#logging_performance

    【讨论】:

    • 我使用 STS(Spring Tool Suite) 进行代码开发。并且要求有这些子句来检查是否启用了 Logger Info
    • 1) 为什么使用 STS/Eclipse 会出现问题? IntelliJ 社区版是免费安装并用于在整个项目中自动转换/修复您的代码(节省大量时间),为什么不安装它然后运行转换并恢复使用 eclipse? 2) 您是否在slf4j.org/faq.html#logging_performance 阅读了有关日志记录性能的链接?当您使用 SLF4J 时,不需要保护子句。也许您应该与任何授权的人一起推迟该要求。
    【解决方案2】:

    你的配置

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

    失败。 使用

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

    并删除排除配置。

    【讨论】:

    • 又试了.. 0%
    猜你喜欢
    • 2014-11-12
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多