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

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

Code coverage in our project

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


答案 1

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

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

  2. 排除类装入器:应从执行分析中排除的类装入器名称的列表。列表条目由 分隔,可以使用 。如果特殊框架与 JaCoCo 代码检测冲突,特别是无权访问 Java 运行时类的类装入器,则可能需要此选项。colon (:)wildcard characters (* and ?)(Default: sun.reflect.DelegatingClassLoader)

警告:请谨慎使用这些选项!无效的条目可能会破坏代码覆盖率启动器。也不要使用这些选项来定义分析的范围。已排除的类仍将显示为未涵盖。

资源链接:

  1. EclEmma 代码覆盖率首选项

以下示例都指定了同一组包含/排除模式:

  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*" />
    <filter excludes="com.foo.*Test*" file="myfilters.txt" />
    其中 myfilters.txt 文件包含以下行:

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

资源链接:

  1. 覆盖范围过滤器
  2. 我确信我所有的类都是用-g(debug='true')构建的,但EMMA仍然抱怨缺少调试信息!

忽略 EclEmma 中单元测试的代码覆盖率

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


答案 2

推荐