我在Android上使用(https://github.com/johncarl81/parceler)Jacoco未能在Parceler類 - Android電子
的Parceler庫,我也使用Jacoco代碼覆蓋。
加入Parceler運行我的測試代碼覆蓋率與Jacoco現在經過然而失敗,出現以下錯誤:
Caused by: java.io.FileNotFoundException: /Users/me/android/myapp/blah/app/build/intermediates/classes/demo/com/me/blah/appname/model/User$Parcelable$Creator$0.class (No such file or directory)
User類如下:
@Parcel
public class User {
@SerializedName("firstName")
String firstName;
@SerializedName("lastName")
String lastName;
@SerializedName("profileImage")
ProfileImage profileImage;
@SerializedName("username")
String username;
// empty constructor needed by the Parceler library
public User() {
}
}
而且我Jacoco文件是這樣的:
apply plugin: 'jacoco'
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
project.afterEvaluate {
android.applicationVariants.all { variant ->
def name = variant.name
def testTaskName = "test${name.capitalize()}UnitTest"
tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") {
group = "Reporting"
description = "Generate Jacoco coverage reports for the ${name.capitalize()} build."
classDirectories = fileTree(
dir: "${project.buildDir}/intermediates/classes/${name}",
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/*$ViewBinder*.*',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*$ViewBinder*.*',
'**/*$ViewInjector*.*',
'**/Lambda$*.class',
'**/Lambda.class',
'**/*Lambda.class',
'**/*Lambda*.class',
'**/*InjectAdapter*.*',
'**/*StaticInjection*.*',
'**/*ModuleAdapter*.*']
)
sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs))
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
}
}
我想知道是否需要將生成的Parceler文件添加到排除我的Jacoco文件中的列表?如果是這樣,我該怎麼做?我嘗試了各種變化,但似乎沒有工作。
錯誤抱怨下列文件丟失:
User$Parcelable$Creator$0.class
其所,而是如下生成文件:
User$$Parcelable.class
任何人都可以解釋一下嗎?
你能確認你的創造者類的名稱?它似乎缺少一些'$'。不應該命名爲'User $$ Parcelable $ Creator $$ 0.class'? –
在生成文件的生成輸出中?它肯定是用戶$$ Parcelable.class –
「Creator」內部類如何?它是什麼名字?是否被proguard偶然刪除? –