我刚刚下载了最新版本的SonarQube 4.3,然后尝试使用以下命令构建一个java-8项目:
mvn clean install
mvn sonar:sonar
Run Code Online (Sandbox Code Playgroud)
这给了我下面的例外.
谷歌搜索,我得到的印象这是一个应该修复的早期问题......?
http://sonarqube.15.x6.nabble.com/Sonar-analyze-Java-1-8-project-Failure-td5023663.html
http://jira.codehaus.org/browse/SONARJAVA-482
SonarQube 4.3是否支持java-8?
或者任何线索,有什么问题?
-------------------------------------------------------
T E S T S
-------------------------------------------------------
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
at org.jacoco.agent.rt.internal_6effb9e.PreMain.createRuntime(PreMain.java:55)
at org.jacoco.agent.rt.internal_6effb9e.PreMain.premain(PreMain.java:47)
... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
at java.lang.Class.getField(Class.java:1690)
at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
... 9 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud) 我正在使用./gradlew createDebugCoverageReport生成所有Android检测(Robotium)测试的代码覆盖率报告.但我需要运行所有测试才能获得覆盖率报告.如何指定执行单个测试(或单个测试类)并获取覆盖率报告?我在测试开发过程中对它进行了测试,一次运行所有测试的速度太慢了.
我正在尝试定义位置,jacoco将为真实设备上运行的检测测试创建覆盖文件.
从--debuggradle任务的运行中我看到这个日志:
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': installing /home/martin/workspace/lib/my-lib/build/outputs/apk/my-lib-debug-androidTest-unaligned.apk
[INFO] [org.gradle.api.Task] Starting 1 tests on Nexus 5X - 6.0.1
[INFO] [org.gradle.api.Task] de.my.lib.utils.UtilsTest testMyTest[Nexus 5X - 6.0.1] [32mSUCCESS [0m
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': fetching coverage data from /data/data/de.my.lib.test/coverage.ec
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': uninstalling de.my.lib.test 13:46:14.538
[DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':my-lib:connectedDebugAndroidTest'
Run Code Online (Sandbox Code Playgroud)
我尝试了三种方法来定义位置:
使用<instrumentation>清单文件中的标记不会改变任何内容.
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="de.my.lib.test"
xmlns:android="http://schemas.android.com/apk/res/android">
<instrumentation
android:name="android.support.test.runner.AndroidJUnitRunner"
xmlns:tools="http://schemas.android.com/tools"
android:targetPackage="de.my.lib.test"
tools:replace="android:targetPackage">
<meta-data
android:name="coverage"
android:value="true" />
<meta-data …Run Code Online (Sandbox Code Playgroud) 我使用 jacoco 进行覆盖率报告。当我查看 jacoco 报告时,报道似乎很好。但是在 Sonarqube 中,覆盖率很低,因为它说@Data来自lombok 的注释不被测试覆盖。
已编译的类被标记为@Generated但它不会被声纳忽略。
如何排除@Data分析?
我有一些Java代码,我想从代码覆盖中排除.我该怎么做?我希望能够添加注释.有没有办法配置或扩展jacoco(在gradle中使用)来使用它?
例:
public class Something
{
@ExcludeFromCodeCoverage
public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取 Android 应用程序模块的测试覆盖率报告并执行testVariantBuildTypeUnitTest任务。
尽管所有测试均已通过,但TEST-classNameTest.xml文件包含以下错误消息。仅当包含从 Kotlin 调用 Java 的方法时才会出现此错误。这个问题有什么解决办法吗?
**Caused by: java.lang.IllegalStateException: Cannot process instrumented class... Please supply original non-instrumented classes.
at org.jacoco.agent.rt.internal_f3994fa.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:238)
at org.jacoco.agent.rt.internal_f3994fa.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:56)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassVisitor.visitField(ClassVisitor.java:339)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.readField(ClassReader.java:1111)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.accept(ClassReader.java:713)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.accept(ClassReader.java:401)
at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:90)
at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:108)
Run Code Online (Sandbox Code Playgroud)
我们有多模块 android 项目,因此我们使用这个自定义 Jacoco 任务来获取覆盖率报告:
project.afterEvaluate {
(android.hasProperty('applicationVariants')
? android.'applicationVariants'
: android.'libraryVariants')
.all { variant ->
def variantName = variant.name
def unitTestTask = "test${variantName.capitalize()}UnitTest"
def jacocoReportName = unitTestTask + project.name
tasks.create(name: jacocoReportName, type: JacocoReport, dependsOn: [
"$unitTestTask"
]) …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,其中包含许多未包含在测试中的遗留代码.
有什么办法可以设置集成服务器来检查所有新提交是否都有最少量的测试(例如,覆盖率> 70%)?
基本上,我看到两个选项:
我更喜欢选项1,因为它强制遗留代码中的更改进行单元测试.这应该会增加整体测试覆盖率.
现在我们使用Jenkins作为我们的CI服务器,使用JaCoCo作为测试覆盖.Maven用于构建项目,SVN是我们的主要源代码控制.
我有一个Android应用程序,它由2个模块组成:
应用 - 用户界面
子模块 - 具有大部分业务逻辑
对于他们每个人,我都有一个gradle任务来验证代码覆盖率:
应用程序:UI代码覆盖率(Espresso)
子模块:单元测试代码覆盖率
作为客户端的要求,我需要合并这两个报告以获得应用程序的整体/全局代码覆盖率.
注意:我正在使用Gradle 3.1.2版.
apply plugin: 'jacoco'
android {
testBuildType "uiTest"
...
buildTypes {
debug {
applicationIdSuffix ".debug"
versionNameSuffix "-debug"
debuggable true
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
matchingFallbacks = ['debug']
}
// TESTS
// unitTest will be used to run unit tests.
unitTest.initWith(buildTypes.debug) //Beware the buildType this depends on MUST be above on the gradle file
unitTest {
applicationIdSuffix ".unitTest"
versionNameSuffix "-unitTest" …Run Code Online (Sandbox Code Playgroud) 我有一个带有Java源代码和Scala测试源的Maven项目.我Jacoco在verify舞台上使用代码覆盖.当我尝试在验证阶段通过添加执行或运行来运行声纳目标时mvn verify sonar:sonar,我最终将Sonar添加两次测试目录:
[INFO] [11:15:34.756] Test directories:
[INFO] [11:15:34.756] /Users/xxx/Documents/workspace/misc/xxx/src/test/scala
[INFO] [11:15:34.756] /Users/xxx/Documents/workspace/misc/xxx/src/test/scala/../scala
Run Code Online (Sandbox Code Playgroud)
这导致分析失败,出现以下错误:
Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.1:sonar (default-cli) on project kv-mapper: Can not execute SonarQube analysis: Unable to read and import the source file : '/Users/xxxx/Documents/workspace/misc/xxx/src/test/scala/../scala/xxx/xxxxx/xxx/xxx/xxxxx/xxxxxx.java' with the charset : 'UTF-8'. Duplicate source for resource
Run Code Online (Sandbox Code Playgroud)
我的pom.xml(对于Sonar)看起来像这样.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>${sonar.plugin.version}</version>
<!-- no default executions -->
<configuration>
<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.language>java</sonar.language>
<sonar.jacoco.itReportPath>
${basedir}/target/jacoco.exec
</sonar.jacoco.itReportPath>
<sonar.exclusions>
**/test/*
</sonar.exclusions>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如何将Sonar配置为:
我需要使用新的jacoco任务检查最小覆盖率
jacocoTestCoverageVerification
此任务在3.4.1 gradle版本和jacoco插件> = 0.6.3中可用
我可以运行另一个生成带有分支覆盖率的html报告的任务,但现在我想使用该数字来使构建失败.
这是我的代码
buildscript {
ext {
....
}
repositories {
mavenCentral()
maven {
....
}
}
dependencies {
.....
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'jacoco'
jar {
baseName = "coverage-test"
}
dependencies {
// my dependencies
}
eclipse {
classpath {
containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
}
}
wrapper {
gradleVersion = '3.4.1'
}
jacoco {
toolVersion = '0.7.9'
}
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false …Run Code Online (Sandbox Code Playgroud)