Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle、Android、Jacoco和JUnit5_Gradle_Android Gradle Plugin_Jacoco_Junit5_Android Junit - Fatal编程技术网

Gradle、Android、Jacoco和JUnit5

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项目?非常感谢您的建议。即使是丑陋的黑客也会受到欢迎,直到有一些官方文件可用 我的代码的相关部

现在,随着JUnit5.0的发布,我正在努力使用jacoco获取代码覆盖率数据

我的项目是多模块的,我的问题是没有为每个模块创建exec文件。根项目中只有一个(看起来几乎是空的)。我找不到这方面的最新指南

我尝试过这里描述的不同方法:没有任何成功

有人在JUnit5和Jacoco的多模块(非Android)Gradle项目中有工作设置吗

还是与JUnit5和Jacoco合作的Gradle Android项目?非常感谢您的建议。即使是丑陋的黑客也会受到欢迎,直到有一些官方文件可用

我的代码的相关部分(其中运行JUnit5至少在命令行和IDE中工作):

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库模块):


当然,我忘了。我仍在努力让它工作。至少我越来越接近了:我不得不删除评论,因为它引用了错误的问题