Joh*_*ese 2 junit testng gradle multi-module jacoco
我正在开发一个项目,我们正在使用TestNG和JUnit进行测试.
不幸的是,在编写TestNG测试时,他们不会在JaCoCo Coverage报告中考虑.
我写了一个testng.gradle
文件,我将其包含在每个build.gradle
文件中(这是一个多模块项目):
task testNG(type: Test) { useTestNG() }
test.dependsOn testNG
Run Code Online (Sandbox Code Playgroud)
JUnit和TestNG测试都以这种方式工作.
如果我写testng.gradle
这样的话:
test {
useTestNG()
}
Run Code Online (Sandbox Code Playgroud)
JaCoCo工作正常,但显然只有TestNG测试才能执行.
我该如何解决?这是Gradle的JaCoCo插件中的错误吗?
似乎Gradle JaCoCo插件增强了testNG
任务,因此它的执行使用了JaCoCo Java代理,但它忘记了更新jacocoTestReport
任务,因此这个任务不会使用testNG
任务执行结果.不知道这是错误还是故意,但下面提供了解决方案.
档案src/main/java/Example.java
:
public class Example {
public void junit() {
System.out.println("JUnit");
}
public void testng() {
System.out.println("TestNG");
}
}
Run Code Online (Sandbox Code Playgroud)
档案src/test/java/ExampleJUnitTest.java
:
import org.junit.Test;
public class ExampleJUnitTest {
@Test
public void test() {
new Example().junit();
}
}
Run Code Online (Sandbox Code Playgroud)
档案src/test/java/ExampleTestNGTest.java
:
import org.testng.annotations.Test;
public class ExampleTestNGTest {
@Test
public void test() {
new Example().testng();
}
}
Run Code Online (Sandbox Code Playgroud)
档案build.gradle
:
apply plugin: 'java'
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
dependencies {
testCompile 'org.testng:testng:6.8.8'
testCompile 'junit:junit:4.12'
}
task testNG(type: Test) {
useTestNG()
}
test {
dependsOn testNG
}
Run Code Online (Sandbox Code Playgroud)
执行后gradle clean test jacocoTestReport -d
你会在日志中看到
java ... -javaagent:.../jacocoagent.jar=destfile=build/jacoco/testNG.exec ...
...
java ... -javaagent:.../jacocoagent.jar=destfile=build/jacoco/test.exec ...
Run Code Online (Sandbox Code Playgroud)
并且该目录build/jacoco
包含两个文件- testNG.exec
和test.exec
,对于testNG
和test
分别任务.JaCoCo报告仅显示test
任务执行JUnit .
指示任务testNG
将执行数据写入同一文件test
:
task testNG(type: Test) {
useTestNG()
jacoco {
destinationFile = file("$buildDir/jacoco/test.exec")
}
}
Run Code Online (Sandbox Code Playgroud)
指示任务jacocoTestReport
也使用testNG.exec
文件:
jacocoTestReport {
executionData testNG
}
Run Code Online (Sandbox Code Playgroud)
我假设一般情况下应该针对多模块项目的情况做同样的事情,特别是在你的情况下,因为没有提供你的多模块项目设置的Minimal,Complete和Verifiable示例.
归档时间: |
|
查看次数: |
2338 次 |
最近记录: |