我一直在从事一个android项目,并使用来做unitTests。
当我运行gradle jacocoTestReport
时,它将显示
[ant:jacocoReport] Classes in bundle 'app' do no match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class com/my/app/MyClass does not match.
在这里,我使用powermock来模拟Myclass.java中的静态方法。
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@PowerMockIgnore({ "org.mockito.*", "org.robolectric.*", "android.*" })
@PrepareForTest(MyClass.class)
public class TheTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
@Test
public void test1() throws Exception {
PowerMockito.mockStatic(MyClass.class);
// do something
}
}
build.gradle如下所示
apply plugin: 'jacoco'
def coverageSourceDirs = [
'../app/src/main/java'
]
task jacocoTestReport(type:JacocoReport, dependsOn: "testDebugUnitTest") {
group = "Reporting"
description = "Generate Jacoco coverage reports"
classDirectories = fileTree(
dir: '../app/build/intermediates/classes/debug',
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/BuildConfig.*',
'**/Manifest*.*']
)
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files('../app/build/jacoco/testDebugUnitTest.exec')
reports {
xml.enabled = true
html.enabled = true
}
}
我仍然可以毫无歪曲地看到报道。
但如何消除这种警告呢?
发布于 2015-11-11 18:20:08
当您使用Java jacocoTestReport编译类并运行测试()时,就会发生这种情况,但是运行任务(在Gradle中)时,您使用的是另一个Java -即JavaY。
您是设置不同的JAVA版本还是使用不同的级别(使用不同的JAVA)?当您看到关于xxx/yyy/zzz类的执行数据的警告/错误消息不匹配时,您可能得到了部分覆盖率,这意味着它将反映0%的覆盖率。
若要解决以下问题:
[ant:jacocoReport] Classes in bundle 'app' do no match with execution data. For report generation the same class files must be used as at runtime.
[ant:jacocoReport] Execution data for class com/my/app/MyClass does not match.
确保:
或如果上面的内容没有帮助,
前任:
gradle clean build
gradle ...some..nonUnitTestTask
然后
gradle jacocoTestReport -x test -x testClasses -x compileJava -x classes
发布于 2018-06-05 18:37:04
当我尝试独立于我的jacocoTestReport
任务运行test
任务时,我遇到了这个问题--不是不同的test
版本,只是陈旧的类。
解决办法之一是确保您得到一个新的构建和一个新的测试运行:
$ gradle clean && gradle test && gradle jacocoTestReport
另一种方法是创建一个按顺序运行test
和jacocoTestReport
的复合任务。在你的build.gradle
里
task coverage {
dependsOn 'test'
dependsOn 'jacocoTestReport'
tasks.findByName('jacocoTestReport').mustRunAfter('test')
}
我是JaCoCo的新手,我觉得这应该更容易一些,但这对我来说是有效的。
发布于 2020-01-19 13:32:48
如果您使用的是IntelliJ + Maven,请尝试如下
转到文件->失效缓存/重新启动
https://stackoverflow.com/questions/33517805
复制相似问题