JaCoCo
TeamCity 支持 JaCoCo,这是一种 Java 代码覆盖工具,让您可以衡量一组广泛的覆盖指标和代码复杂性。
JaCoCo 可用于以下构建运行程序: Ant、IntelliJ IDEA Project、Gradle 和 Maven。
tip
为了确保正确收集覆盖率数据,请确保您的测试在一个或多个单独的 JVM 中运行。
Ant 和 Intellij Idea 项目运行器:这是 TestNG 的默认设置,对于 Junit 测试任务,设置
fork=true
。Maven runner:将
forkCount
设置为一个 大于 0 的值。Gradle runner:这是 Gradle tests 的默认设置。
TeamCity 支持 Java 代理覆盖模式,让您可以在不修改构建脚本或二进制文件的情况下收集覆盖率。 无需额外的构建步骤 — 只需在运行测试的构建步骤中选择 JaCoCo 覆盖率:
在 代码覆盖率 部分,从 选择覆盖率运行器 下拉菜单中选择 JaCoCo 作为覆盖工具。
设置覆盖率选项 — 请参考下述的可用选项描述。
note
请注意,此运行程序当前不支持为 Android 项目配置的自动 JaCoCo 覆盖。要在 Android 项目中提供 JaCoCo 覆盖,构建脚本应生成
.exec
文件,并按照在 此节中描述的方式导入它们。
选项 | 描述 | 示例 |
---|---|---|
类文件目录或jar包 | 以
|
|
要进行仪器化的类 | 以 |
|
tip
在默认情况下,TeamCity 中的
jacoco.sources
属性被设置为.
,这意味着 TeamCity 将扫描包含所有子目录在内的整个检出目录以获取您的源代码。
请检查您的类文件是否已经以包含源文件信息的调试信息编译,以便在报告中查看带有高亮显示的源代码。
代码覆盖率结果可以在概览选项卡的构建结果页面上查看;详细报告显示在专用的代码覆盖率选项卡上。
TeamCity 可以解析 JaCoCo 覆盖数据,并使用以下格式的 服务消息 生成报告:
##teamcity[jacocoReport dataPath='<path to jacoco.exec file>']
TeamCity 将使用默认的 JaCoCo 版本来解析导入的数据。 请注意,如果导入的覆盖率由不同的次版本(X.X.X 中的第二个数字)生成,TeamCity 将无法处理其类文件并收集覆盖率。 为了防止这种情况,确保在 管理 | 工具 | JaCoCo 覆盖率 中选择的默认版本与您要导入的覆盖率的工具版本相对应。
或者,您也可以直接在服务消息体中指定所需的工具版本: ##teamcity[jacocoReport dataPath='coverage_data/jacoco.exec' includes='*' classpath='+:build/classes/java/main/**' toolVersion='X.X.X']
。 确保指定的版本已在 TeamCity 服务器上安装。
特性 | 描述 | 默认值 | 示例 |
---|---|---|---|
dataPath | 相对于检出目录的空格分隔的路径集,用于读取 jacoco 数据文件 |
| |
包含 | 以空格分隔的类名包含模式集 |
|
|
排除 | 由空格分隔的类名排除模式集合 |
| |
源 | 相对于检出目录的,由空格分隔的路径集,用于读取来源。 默认无需列出。 |
|
|
classpath | 空格分隔的路径模式集,以 |
|
|
reportDir | 存储临时文件的目录路径。 报告将在此目录下以覆盖率 | Agent 的临时目录下的一个随机目录 | jacocoReport |
tip
使用
\
(反斜杠)来转义路径中的空格字符。
一个完整服务消息的示例:
##teamcity[jacocoReport dataPath='jacoco.exec' includes='com.package.core.*' classpath='classes/lib/some.jar' reportDir='temp/jacocoReport']
感谢您的反馈!