java - 使用 Cobertura 时如何忽略 Logger 相关的 If 条件?

标签 java logging junit cobertura maven-cobertura-plugin

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

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

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

现在显然,没有其他部分了。上面的代码将有 50% 的分支覆盖率。我怎样才能做到100%?

我尝试忽略仪器中的 Logger 调用:

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

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

有解决办法吗?

如有任何帮助,我们将不胜感激。

最佳答案

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

IntelliJ IDEA 将为您转换为此内容 - Menu>Analyze>Run Inspection By Name == "Non-Constant String concatenation as argument tologging call")并为其找到的问题提供快速修复。 请参阅http://www.slf4j.org/faq.html#logging_performance

关于java - 使用 Cobertura 时如何忽略 Logger 相关的 If 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456447/

相关文章:

java - Hibernate Criteria 内的函数

java - 我使用Spring Data JPA在MySQL中创建表,但创建失败

java - 在 Spring JSP 页面中使用集合时出现 Hibernate LazyInitializationException

java - 参数化多层套件

java - 我是 Java 自动化测试的新手。我应该更喜欢哪个工具? JUnit 还是 TestNG?

java - 如何在不使用 IDE 的情况下在 Java 中包含库

tomcat - 设置日志级别以调试 Tomcat 中的 Web 应用程序

iphone - 应用程序刚刚批准在 iPad 上崩溃

macos - mac重新启动: previous shutdown cause: -20是什么意思

unit-testing - 从 grails 2.3 升级到 2.5 后单元测试无法运行