我有一个gradle项目,它应用了sonarqube gradle插件,版本2.6 我在我的团队的sonarqube服务器版本6.4(版本25310)上运行它。
根据documentation,新版本的sonarqube接受属性sonar.junit.reportPaths
而不是sonar.junit.reportsPath
。
我的构建运行了2个测试任务:test
和integrationTest
。每个测试任务将其xml分别输出到另一个目录:build/test-results/test
和build/test-results/integrationTest
我配置了sonarqube插件来获取这两个目录:
project.sonarqube {
properties {
property 'sonar.junit.reportsPath', ['build/test-results/test',
'build/test-results/integrationTest']
// configure additional integration test properties that seem to be required
Collection<File> integrationTestSourceDirs = project.sourceSets.integrationTest.allJava.srcDirs.findAll { File dir -> dir.exists() }
properties['sonar.tests'] += integrationTestSourceDirs
Collection<File> integrationTestsClasses = project.sourceSets.integrationTest.output.classesDirs.files.findAll { File file -> file.exists() }
properties['sonar.java.test.binaries'] += integrationTestsClasses
}
}
这不起作用。在sonarqube UI中,我只看到单元测试(来自test
目录)并且没有看到任何集成测试。
我确保我的integrationTest
目录包含有效的测试报告,确实如此。
似乎sonarqube仍然使用旧参数sonar.junit.reportsPath
(默认情况下由gradle插件分配值build/test-results/test
)。我可以告诉你,因为如果我删除这个参数,我在UI中根本看不到任何单元测试。这就是我删除旧参数的方法:
project.sonarqube {
properties {
properties.remove("sonar.junit.reportsPath")
}
}
作为一种解决方法,我将integrationTest
任务配置为将其输出放在与单元测试相同的目录中:build/test-results/test
。完成此操作后,所有测试(包括集成测试)都会被sonarqube选中,我可以在UI中看到它们。
但是,我更愿意将不同测试任务的输出保存在不同的目录中 描述的行为是故意的,还是一个错误?
答案 0 :(得分:2)
您的SonarJava
插件太旧了。新酒店仅在4.11开始提供。在4.10中,仅评估旧属性,因此忽略新属性。 Gradle插件只设置属性。评估发生在从SonarQube服务器下载的代码中,因此被忽略。