Gradle、Android、Jacoco和JUnit5
现在,随着JUnit5.0的发布,我正在努力使用jacoco获取代码覆盖率数据 我的项目是多模块的,我的问题是没有为每个模块创建exec文件。根项目中只有一个(看起来几乎是空的)。我找不到这方面的最新指南 我尝试过这里描述的不同方法:没有任何成功 有人在JUnit5和Jacoco的多模块(非Android)Gradle项目中有工作设置吗 还是与JUnit5和Jacoco合作的Gradle Android项目?非常感谢您的建议。即使是丑陋的黑客也会受到欢迎,直到有一些官方文件可用 我的代码的相关部分(其中运行JUnit5至少在命令行和IDE中工作):Gradle、Android、Jacoco和JUnit5,gradle,android-gradle-plugin,jacoco,junit5,android-junit,Gradle,Android Gradle Plugin,Jacoco,Junit5,Android Junit,现在,随着JUnit5.0的发布,我正在努力使用jacoco获取代码覆盖率数据 我的项目是多模块的,我的问题是没有为每个模块创建exec文件。根项目中只有一个(看起来几乎是空的)。我找不到这方面的最新指南 我尝试过这里描述的不同方法:没有任何成功 有人在JUnit5和Jacoco的多模块(非Android)Gradle项目中有工作设置吗 还是与JUnit5和Jacoco合作的Gradle Android项目?非常感谢您的建议。即使是丑陋的黑客也会受到欢迎,直到有一些官方文件可用 我的代码的相关部
build.gradle:
构建脚本{
依赖关系{
...
classpath'org.junit.platform:junit平台gradle插件:1.0.0'
类路径“de.mannodermaus.gradle.plugins:android-junit5:1.0.0”
}
}
...
应用插件:“org.junit.platform.gradle.plugin”
ext.junitVintageVersion='4.12.0'
ext.junitPlatformVersion='1.0.0'
ext.junitJupiterVersion='5.0.0'
子项目{
应用插件:“jacoco”
杰科科{
toolVersion=“0.7.6.201602180812”
}
...
junitPlatform{
过滤器{
引擎{
包括“junit jupiter”、“junit vintage”
}
标签{
排除“慢”
}
includeClassNamePatterns'.*测试','.*测试'
}
}
}
...
依赖关系{
//org.junit.platform.commons.util.PremissionException:
//不能在没有至少一个TestEngine的情况下创建启动器;考虑将引擎实现jar添加到类路径中。
testCompile(“org.junit.jupiter:junitjupiter引擎:${junitJupiterVersion}”)
}
我尝试过这里描述的不同方法:没有任何成功
对于非Android项目,这些方法看起来不错
有人在JUnit5和Jacoco的多模块(非Android)Gradle项目中有工作设置吗
但无论如何,下面是一个非Android项目的完整工作示例
还是与JUnit5和Jacoco合作的Gradle Android项目
请注意,Android项目与非Android项目完全不同,包括但不限于测试的配置/执行和覆盖率的计算
特别是,默认情况下,JaCoCo库()在使用Java代理执行应用程序的过程中更改了记录覆盖率的类。这个模式正是默认的jacocogradle插件()提供的
Java代理不能在Android上使用,因此对于Android,类的更改在Android Gradle插件()构建期间“离线”(off-line)进行
似乎org.junit.platform:junit platform gradle plugin
也不适用于Android项目-目前,在
作为一名Android项目的日常开发者,我不能提供比这更多的信息
settings.gradle
:
include 'a'
include 'b'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0'
}
}
ext.junitJupiterVersion = '5.0.0'
subprojects {
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: 'jacoco'
jacoco {
toolVersion = '0.7.9'
applyTo junitPlatformTest
}
junitPlatformTest {
jacoco {
destinationFile = file("$buildDir/jacoco/test.exec")
}
}
dependencies {
testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
}
}
task wrapper(type: Wrapper) {
gradleVersion = '4.1'
}
build.gradle
:
include 'a'
include 'b'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0'
}
}
ext.junitJupiterVersion = '5.0.0'
subprojects {
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: 'jacoco'
jacoco {
toolVersion = '0.7.9'
applyTo junitPlatformTest
}
junitPlatformTest {
jacoco {
destinationFile = file("$buildDir/jacoco/test.exec")
}
}
dependencies {
testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitJupiterVersion}")
}
}
task wrapper(type: Wrapper) {
gradleVersion = '4.1'
}
a/src/main/java/a.java
:
public class A {
}
public class ATest {
@org.junit.jupiter.api.Test
public void test() {
new A();
}
}
public class B {
}
public class BTest {
@org.junit.jupiter.api.Test
public void test() {
new B();
}
}
a/src/test/java/ATest.java
:
public class A {
}
public class ATest {
@org.junit.jupiter.api.Test
public void test() {
new A();
}
}
public class B {
}
public class BTest {
@org.junit.jupiter.api.Test
public void test() {
new B();
}
}
b/src/main/java/b.java
:
public class A {
}
public class ATest {
@org.junit.jupiter.api.Test
public void test() {
new A();
}
}
public class B {
}
public class BTest {
@org.junit.jupiter.api.Test
public void test() {
new B();
}
}
b/src/test/java/BTest.java
:
public class A {
}
public class ATest {
@org.junit.jupiter.api.Test
public void test() {
new A();
}
}
public class B {
}
public class BTest {
@org.junit.jupiter.api.Test
public void test() {
new B();
}
}
执行gradle test后,将生成jacotestreport
文件a/build/jacoco/test.exec
和b/build/jacoco/test.exec
,以及如下所示的报告
a/build/reports/jacoco/test/html/index.html
:
b/build/reports/jacoco/test/html/index.html
:
多亏了示例的指导,我能够获得一些*代码覆盖率(通过在IDE中打开生成的.exec文件进行验证,并检查覆盖率是否显示):
*在JUnit5下运行的JUnit4测试的一些含义
gradlew junitPlatformTestDebug
-->$buildDir/jacoco/junitPlatformTestDebug.exec
settings.gradle:
include 'a'
include 'b'
build.gradle(父级):
build.gradle(主应用程序):
build.gradle(b-Android库模块):
当然,我忘了。我仍在努力让它工作。至少我越来越接近了:我不得不删除评论,因为它引用了错误的问题