当我们运行 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 文件中排除它们。
有办法吗?
Preview 的文档说它可以应用于:
注释类,然后可用于注释 @Composable 方法或其他注释类,然后将其视为使用该预览间接注释。
所以我想您可以创建一个注释“PreviewExludedFromJacoco”,并用预览进行注释。这并不完全是您所要求的,但它允许您为每个预览功能只有一个注释。
简单地排除您不想被报告的内容:
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")) }
))
}