如何从 Jacoco 报告中排除所有 Jetpack Compose 的预览功能?

问题描述 投票:0回答:2

当我们运行 Jetpack Compose 函数的 Jacoco 代码覆盖率时,我喜欢排除所有预览函数。

我可以使用

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
internal annotation class ExcludeFromJacocoGeneratedReport

然后对于我想从报告中排除的功能,我用

进行注释
@ExcludeFromJacocoGeneratedReport
@Preview(
    name = "Name"
)
@Composable
private fun MyComposePreview() {
    // ... function content
}

这有效。但我必须将注释添加到我的所有预览功能中。 我希望我可以在 build.gradle 文件中排除它们。

有办法吗?

android build.gradle android-jetpack-compose code-coverage jacoco
2个回答
1
投票

Preview 的文档说它可以应用于:

注释类,然后可用于注释 @Composable 方法或其他注释类,然后将其视为使用该预览间接注释。

所以我想您可以创建一个注释“PreviewExludedFromJacoco”,并用预览进行注释。这并不完全是您所要求的,但它允许您为每个预览功能只有一个注释。


0
投票

简单地排除您不想被报告的内容:

val exclusions = listOf(
"**/R.class",
"**/R\$*.class",
"**/BuildConfig.*",
"**/Manifest*.*",
"**/*Test*.*",
"**/ComposableSingletons*",
"**/tmp/**/*.class",
"**/App.class",
"**/di",
"**/hilt_aggregated_deps",
"**/dagger",
"**/test",
"**/ErrorHandlingKt.class",
"**/*Preview*",
"**/*_*",)



tasks.register<JacocoReport>("jacocoReport") {
group = "other"
description = "Execute UI and unit tests, generate and combine Jacoco coverage report"
reports {
    xml.required = true
    html.required = true
}

val javacFiles = fileTree("build/intermediates/javac/") {
    exclude(exclusions)
}.also { it.files.forEach { file -> println("javacFiles ${file.name}") } }
val kotlinFiles = fileTree("build/tmp/kotlin-classes/") {
    exclude(exclusions)
}.also { it.files.forEach { file -> println("kotlinFiles ${file.name}") } }
classDirectories.setFrom(files(javacFiles, kotlinFiles))
executionData.setFrom(files(
    fileTree(layout.projectDirectory) { include(listOf("**/*.exec", "**/*.ec")) }
))
}
© www.soinside.com 2019 - 2024. All rights reserved.