Sonar最新版本2.12集成了Jacoco插件,我想将它用于多模块项目的代码覆盖部分.
我有这样的结构
proj.com.parent
proj.com.provider
proj,com.test
Run Code Online (Sandbox Code Playgroud)
提供者项目的测试用例位于测试项目中.当我将声纳中的代码覆盖率插件设置为jacoco时,它执行正常,但组合代码掩盖不会出现在DashBoard上.我已经看到一个帖子,单个jacoco.exec文件可以解决问题,但我无法这样做.
我试图在下面的pom中配置以下内容
<profile>
<id>sonar</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<sonar.jacoco.reportPath>${basedir}/code-coverage/jacoco.exec</sonar.jacoco.reportPath>
<sonar.jacoco.jar> C:\sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar</sonar.jacoco.jar>
</properties>
Run Code Online (Sandbox Code Playgroud)
但在maven命令行"mvn clean install"上我收到此错误:
无法在C:\ sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar中找到Premain-Class清单属性.初始化期间发生错误VM代理程序库无法初始化:仪器
任何人都可以提供任何帮助吗?
我正在尝试使用Gradle运行Jacoco以获取示例Android应用程序.我知道Android和Java插件都不能包含在内,所以我相信在运行测试生成jacoco.exec文件之前,应该为android代码进行预检测.但是,我在运行gradle构建文件时遇到了由java.lang.StackOverflowError引起的TargetInvocationException.错误是:本机方法中的致命错误:-javaagent的处理失败
这是我的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.8.+'
}
}
apply plugin: 'android'
apply plugin: 'jacoco'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
res.srcDirs = ['res']
java.srcDir file('src')
}
}
}
sourceSets {
unitTest {
java.srcDir file('unitTest/src')
}
}
configurations {
unitTestCompile.extendsFrom runtime
unitTestRuntime.extendsFrom unitTestCompile
codeCoverage
}
repositories {
mavenCentral()
}
dependencies {
unitTestCompile files("$project.buildDir/classes/release")
unitTestCompile 'junit:junit:4.11'
unitTestCompile 'org.robolectric:robolectric:2.2'
unitTestCompile 'com.google.android:android:4.0.1.2'
codeCoverage 'org.jacoco:org.jacoco.agent:0.6.5.201403032054:runtime@jar'
}
tasks.whenTaskAdded { task ->
if(task.name == 'unitTest'){ …Run Code Online (Sandbox Code Playgroud) 我在Eclipse Luna下有一个Java项目,使用EclEmma 2.3.1.201405111647(最新版),它使用Jacoco 0.7.1,它支持Java 8,如更改日志中所述:
"2.3.1版(2014/05/11)
Run Code Online (Sandbox Code Playgroud)Fixed ASM 5.0.1 dependency conflicts with new ASM bundles in Eclipse 4.4 (GitHub #83). Upgrade to JaCoCo 0.7.1 for full Java 8 support.
我现在有以下toString:
@Override
public String toString() {
// [BLOCK0]
if (0 == value) {
return "0B";
}
// [BLOCK1]
final MutableLong val = new MutableLong(value);
final StringBuilder sb = new StringBuilder();
// [BLOCK2]
Arrays.asList(TERA_BYTES, GIGA_BYTES, MEGA_BYTES, KILO_BYTES, BYTES).forEach(unit -> {
// [BLOCK3]
long divider = unit.toBytes(1);
long n = val.longValue() …Run Code Online (Sandbox Code Playgroud) 我们有一个包含子模块的 Maven 项目。有一个父 pom.xml 并且每个子项目都被制作成一个 war 文件。每个子模块都有单元测试用例和从 Jacoco 生成的报告。
现有报告显示单个模块的单元测试覆盖率,但我们需要在 Tomcat 上提供集成测试范围的代码覆盖率。我们所做的是在 Tomcat 文件夹中安装 jacoco 代理并将其配置为生成 jacoco.exec。当我使用 EclEmma 插件导入 jacoco.exec 时,我们会看到代码覆盖率。
有没有办法在没有源代码的情况下从独立的 jacoco.exec 生成报告?
如何在Jacoco涵盖范围中忽略* .1类?
我的POM中包含以下内容:
<execution>
<id>JaCoco Coverage Enforcement</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</dataFile>
<excludes>
<exclude>**/MyClass.**</exclude>
</excludes>
<rules>
...
</rules>
</execution>
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
[警告] com.mypackage.MyClass.1类违反了规则:行覆盖率是0.00,但预期最小值是0.85
更新12/19
这是文件夹结构中的内容:
$ find . -iname 'MyClass*class'
./target/classes/com/mypackage/MyClass$1.class
./target/classes/com/mypackage/MyClass.class
Run Code Online (Sandbox Code Playgroud) 我有一个项目,使用JUnit形成简单的单元测试(test/java)和Spock来执行更复杂的数据驱动的单元测试(test/groovy).我用Gradle构建了这一切.
我的问题是生成JaCoCo报告会导致代码覆盖率非常低,因为它似乎只考虑了JUnit测试.我可以在IntelliJ,Pitest中一起运行这些测试,并且通过Gradle也可以找到所有测试并报告正确的线路覆盖范围.
(我需要JaCoCo设置我的GitHub盾牌)
如何让JaCoCo使用两个测试框架报告线路覆盖?
的build.gradle
group 'com.rox'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'jacoco'
apply plugin: 'info.solidsoft.pitest'
apply plugin: 'application'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.11'
compile group: 'junit', name: 'junit', version: '4.11'
compile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
compile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4-rc-1'
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.4"
}
}
task runDebugUI(type: JavaExec, …Run Code Online (Sandbox Code Playgroud) 我使用Jacoco找到的单元测试代码覆盖率ANT但不生成报告,我得到这个错误序列:
[jacoco:report] Loading execution data file C:\JUnit\apache-ant-1.10.1\jacoco.ex
ec
[jacoco:report] Writing bundle 'Test' with 566 classes
[jacoco:report] Classes in bundle 'Test' do no match with execution data. For report generation the same class files must be used as at runtime.
[jacoco:report] Execution data for class com/!!/AccountDetails does not match.
[jacoco:report] Execution data for class com/!!/DataExtractorHelper does not match.
[jacoco:report] Execution data for class com/!!/WelcomeLetter does not match.
[jacoco:report] Execution data for class com/!!/WelcomeLetterABCD does not match.
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这些答案,但似乎没有一个能帮助我解决问题。 …
我知道这个主题有很多问题(和答案),但我已经尝试了在SO和其他网站上找到的所有内容,而且我还没有找到一种方法让JaCoCo包括使用Mockito的Android测试的覆盖范围.
我的问题:我想使用JaCoCo生成单元测试和仪器测试(androidTest)的代码覆盖率.我正在使用Mockito来模拟一些课程.我在GitHub中找到了一个使用JaCoCo的样本并将其作为起点.
https://github.com/rafaeltoledo/unified-code-coverage-android
当我运行该示例中包含的自定义jacocoTestReport任务时,代码覆盖率报告已正确生成,代码覆盖率为100%.该报告包括单元测试和android测试.但是,该示例不使用Mockito(我需要),因此我将以下内容添加到app/build.gradle中
dependencies {
...
androidTestCompile 'org.mockito:mockito-android:2.10.0'
}
Run Code Online (Sandbox Code Playgroud)
我在app/src/main/java/net/rafaeltoledo/coverage/Util.java中添加了一个名为Util的非常简单的Java类
public class Util {
public int anIntMethod() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
并将以下简单测试添加到app/src/androidTest/java/net/rafaeltoledo/coverage/MainActivityTest.java中的现有android测试
@Test
public void utilMethod() {
Util util = Mockito.mock(Util.class);
Mockito.doReturn(10).when(util).anIntMethod();
assertThat(util.anIntMethod(), is(10));
}
Run Code Online (Sandbox Code Playgroud)
当我再次运行jacocoTestReport时,代码覆盖率降至88%,并且报告实际上显示我的测试未涵盖Util类,即使我显然有一个练习该类的测试.
(我想添加报告的截图,但我没有足够的声誉,所以这里有一个覆盖报告和执行报告的链接,表明两个测试实际上都已执行)
版本信息:Gradle插件:2.3.3 Jacoco:0.7.8.201612092310 Android Studio:2.3.3 Android构建工具:25.0.2
这是Jacoco限制还是我做错了什么?
android mockito jacoco android-gradle-plugin android-instrumentation
我已经设置了一个基本的kotlin项目(空类,一个测试文件),并尝试使用gradle插件设置jacoco with gradle:https://docs.gradle.org/current/userguide/jacoco_plugin.html
当我运行测试时,一个测试通过,但是没有创建jacoco.exec文件.我错过了什么?我假设这些类永远不会得到检测,但似乎无法找到有关如何为jacoco设置build.gradle的更多信息.或者jacoco不能从kotlin创建的类文件?
group 'com.ronnev.filewatcher'
version '0.1'
buildscript {
ext.kotlin_version = '1.1.61'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
}
}
apply plugin: 'kotlin'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: 'jacoco'
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
testCompile 'org.junit.jupiter:junit-jupiter-api:5.0.2'
testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.0.2'
}
jacoco {
toolVersion = "0.7.9"
reportsDir = file("$buildDir/jacoco/")
}
jacocoTestReport {
classDirectories = files("${buildDir}/classes")
reports {
xml.enabled true
csv.enabled false
html.destination file("${buildDir}/jacoco/jacocoHtml")
}
}
test {
jacoco {
append = …Run Code Online (Sandbox Code Playgroud) 我正在使用Jacoco创建一份覆盖率报告,并且在更新Gradle和BuildTools版本之前一直工作良好。然后,我还原这些更改并重新工作。
Jacoco在以下位置查找.class文件:
$ {buildDir} /中间体/类/调试
这是app / build / intermediates / classes / debug。但我注意到,升级后该路径丢失了,中间体中间没有类目录
我的配置正在工作:
项目级模块
classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'io.fabric.tools:gradle:1.25.1'
Run Code Online (Sandbox Code Playgroud)
应用级模块
compileSdkVersion 27
buildToolsVersion "27.0.3"
Run Code Online (Sandbox Code Playgroud)
当更新时是这样的:
项目级模块
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'io.fabric.tools:gradle:1.25.4'
Run Code Online (Sandbox Code Playgroud)
应用级模块
compileSdkVersion 28
buildToolsVersion "28.0.3"
Run Code Online (Sandbox Code Playgroud)
我找不到有关该路径正在移动或正在发生的情况的任何参考
我的问题是,由于Java字节码(生成的.class文件)不存在,因此Jacoco无法创建覆盖率报告