ale*_*.tu 5 java android powermock gradle jacoco
我一直在研究android项目,并使用roboletric和powermock来完成unitTest.
当我跑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.
Run Code Online (Sandbox Code Playgroud)
我使用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
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然可以看到覆盖率报告没有失真.
但是如何摆脱这种警告呢?
谢谢.
发生这种情况时,您使用的是Java版本X编译类和运行测试(jacoco),但在运行jacocoTestReport任务(在摇篮),你正在使用其他的Java版本也叫Java ÿ.
您是在设置不同的JAVA版本还是使用不同的Gradle(使用不同的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.
Run Code Online (Sandbox Code Playgroud)
确保:
或者,如果以上没有帮助,
例如:
gradle clean build
gradle ...some..nonUnitTestTask
Run Code Online (Sandbox Code Playgroud)
然后
gradle jacocoTestReport -x test -x testClasses -x compileJava -x classes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6668 次 |
| 最近记录: |