我正在使用安卓上的Parceler库(https://github.com/johncarl81/parceler)
我还使用Jacoco作为代码覆盖范围。
但是,在添加Parceler之后,使用Jacoco运行我的测试代码覆盖率,现在失败了,出现了以下错误:
由: /Users/me/android/myapp/blah/app/build/intermediates/classes/demo/com/me/blah/appname/model/User$Parcelable$Creator$0.class :java.io.FileNotFoundException引起(没有这样的文件或目录)
用户类如下:
@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文件中的排除列表中?如果是的话,我该怎么做呢?我试过各种变体,但似乎都没有用。
错误会导致以下文件丢失:
用户$Parcelable$Creator$0.class
它是这样的,而是生成如下文件:
User$$Parcelable.class
有人能解释一下吗?
发布于 2016-09-06 13:48:25
我只是把它排除在jacocoAndroidCoverage.gradle中,就像这样,现在起作用了
def coverageSourceDirs = [
'../app/src/main/java'
]
task jacocoStagingDebugCoverageReport(type:JacocoReport, dependsOn: ["connectedStagingDebugAndroidTest"]) {
group = "Reporting"
description = "Generate Jacoco coverage reports for staging debug"
classDirectories = fileTree(
dir: '../app/build/intermediates/classes/staging/debug/com/',
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/*$ViewBinder*.*',
'**/*MembersInjector*.*',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*$Lambda$*.class',
'**/*Factory*.class',
'**/*$Builder*',
'**/*$Parcelable*.*',
'**/*DaggerApplicationComponent*.class',
'**/api']
)
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files('build/outputs/code-coverage/connected/flavors/staging/coverage.ec')
reports {
xml.enabled = true
html.enabled = true
}
}发布于 2020-03-17 14:33:22
试试这个:
jacocoAndroidUnitTestReport {
excludes += ['**/*Creator.class']
}https://stackoverflow.com/questions/38382960
复制相似问题