如何从 EclEmma 的覆盖率计算中排除 类 而实际上不将它们从覆盖率本身中排除

How to exclude classes from the coverage calculation in EclEmma without actually excluding them from the coverage itself

我正在使用 EclEmma 来测试我的场景测试和用例测试对我的项目的覆盖率。 我有一个基本包,其中包含最通用的 classes 和用例测试。覆盖范围如下所示:

我想要的是从覆盖率计算中排除用例测试(例如 BugReportTest)。但我确实希望考虑其中的测试。我知道如何从覆盖范围中排除整个 class 但如果我这样做,我的覆盖率百分比会下降,因为检查我的代码行的实际测试被遗忘了。由于隐私原因,这些用例测试确实需要保留在 Base 包中。

出于技术原因,可能需要从代码覆盖率分析中排除某些 classes。以下选项将覆盖代理配置为从分析中排除某些 classes。除了性能优化或技术极端情况外,通常不需要这些选项。

  1. 排除: 应从中排除的 class 个名称的列表 执行分析。列表条目由 colon (:) 分隔 并且可以使用 wildcard characters (* and ?). (Default: empty)

  2. Exclude classloaders: 应该是 class 加载程序名称的列表 从执行分析中排除。列表条目由 一个 colon (:) 并且可以使用 wildcard characters (* and ?)。这个选项 在与冲突的特殊框架的情况下可能需要 JaCoCo 代码检测,特别是 class 加载器不 可以访问 Java 运行时 classes。 (Default: sun.reflect.DelegatingClassLoader)

Warning: Use these options with caution! Invalid entries might break the code coverage launcher. Also do not use these options to define the scope of your analysis. Excluded classes will still show as not covered.

资源Link:

  1. EclEmma Code Coverage Preferences

以下示例都指定了同一组 inclusion/exclusion 模式:

  1. <filter includes="com.foo.*" excludes="com.foo.test.*, com.foo.*Test*" />
  2. <filter includes="com.foo.*" /> <filter excludes="com.foo.test.*, com.foo.*Test*" />
  3. <filter value="+com.foo.*, -com.foo.test.*, -com.foo.*Test* " /><br> <过滤器排除="com.foo.*Test*" 文件="myfilters.txt" /> 其中 myfilters.txt 文件包含这些行:

    -com.foo.test.* +com.foo.*

资源Link:

  1. Coverage filters
  2. 我确定我所有的 classes 都是用 -g(debug='true') 构建的 然而 EMMA 仍然抱怨缺少调试信息!

Ignore code coverage for unit tests in EclEmma

Preferences->Java->Code Coverage 并将 "Only path entries matching" 选项设置为 src/main/java - 似乎工作得很好