我正在尝试为 Java 应用程序项目设置代码覆盖率。
项目名称:NewApp
项目结构:
- src/java/** (源代码)
- src/java-test (单元测试 - Jnuit)
- test/it-test(集成测试)
- 测试/测试(验收测试)
- tomcat/*(包含 tomcat 启动/停止脚本)
- xx/.. 等通常应用程序所需的文件夹。
摇篮版本:1.6
环境:Linux
我有一个正在运行的 gradle 构建脚本,它从构建工件存储库(用于前的工件/maven)获取应用程序(NewApp)依赖项(即应用程序用于构建过程的服务 jar),并构建应用程序。
现在,我想为我的 NewApp 应用程序项目使用 JaCoCo 插件来获得代码覆盖率。
我按照 Gradle/Jacoco 的文档进行操作,但它似乎没有为 jacoco 等创建任何报告/... 文件夹,我可以在其中找到 Jacoco 覆盖报告所做的工作。
我的问题: 1.为了使用单元测试(Junit)获得代码覆盖率,我假设我所要做的就是以下,它不会要求我在运行单元测试之前启动/停止 tomcat(测试任务,即“gradle test” ) 来获得/通过使用单元测试的代码覆盖率。请建议/纠正。代码(仅用于 Gradle jacoco 单元测试部分) - 我使用的是:
apply plugin: 'jacoco'
test {
include 'src/java-test/**'
}
jacocoTestReport {
group = "reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled true
html.enabled true
csv.enabled false
}
//classDirectories = fileTree(dir: 'build/classes/main', include: 'com/thc/**')
//sourceDirectories = fileTree(dir: 'scr/java', include: 'com/thc/**')
additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}
对于集成测试:
task integrationTest(type: Test) {
include 'test/java/**'
}
由于 jacocoTestReport 依赖于测试任务,因此它们将首先被调用,然后最终 jacocoTestReport 将报告它发现的代码覆盖率。
- 为了获得集成测试的代码覆盖率,我假设我必须首先启动 tomcat(即在运行/调用集成测试的测试目标之前),然后调用“gradle integrationTest”或“gradle test”任务,然后停止 tomcat——以获取代码覆盖报告。从其他博客文章中,我还发现应该在 tomcat 启动之前设置 JAVA_OPTS 变量来分配 jacoco 代理。
例如:设置 JAVA_OPTS 变量,如:
export JACOCO="-Xms256m -Xmx512m -XX:MaxPermSize=1024m -javaagent:/production/jenkinsAKS/jobs/NewApp/workspace/jacoco-0.6.3.201306030806/lib/jacocoagent.jar=destfile=/production/jenkinsAKS/jobs/NewApp/workspace/jacoco/jacoco.exec,append=true,includes=*"
export JAVA_OPTS="$JAVA_OPTS $JACOCO"
作为 Gradle/groovy 的新手——如果涉及到 tomcat 的启动/停止,我不确定我应该在 build.gradle(构建脚本)中编写什么代码才能使上述集成/单元测试正常工作。如果有人可以提供示例脚本来做到这一点,我会尝试。
当我在 Jenkins 中发布 Jacoco 代码覆盖率时(使用 Jenkins 发布后构建操作发布 Jacoco 报告),我现在没有得到任何代码覆盖率。Jenkins 构建仪表板显示代码覆盖率为 0%(即条形显示全为红色,实际代码覆盖率无绿色)。
需要您的建议才能对此有所了解。