gpt4 book ai didi

android - Kotlin Jacoco 覆盖率未显示 Android 中的静态方法(伴侣)

转载 作者:行者123 更新时间:2023-11-29 16:32:41 41 4
gpt4 key购买 nike

我使用以下教程在我的 Android 项目中实现了 Jacoco https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f以满足 kotlin 类中的测试覆盖率。

由于某些未知原因,它没有报告在 Companion block 下声明的静态方法的覆盖率。

class Meh {
companion object {
fun test () {
// logic to test
}
}

但是,如果我将该类转换为一个实例而不是一个单例,那么我能够完全看到覆盖率。

有人遇到过这个问题吗?你做了什么?

最佳答案

following tutorial https://proandroiddev.com/unified-code-coverage-for-android-revisited-44789c9b722f

从同一教程中克隆示例到今天的状态 (HEAD commit)

git clone https://github.com/rafaeltoledo/unified-code-coverage-android.git
cd unified-code-coverage-android
git checkout kotlin-coverage

将伴随对象添加到 MainActivity

 class MainActivity : AppCompatActivity() {

+ companion object {
+ fun executed() {
+ }
+
+ fun notExecuted() {
+ }
+ }
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

+ executed()

在新下载的 Android Studio 3.2 中使用 API 28 和目标 Android 9.0 (Google APIs) 启动虚拟设备 Pixel XL .1

和执行

./gradlew jacocoTestReport

以下报告按预期在目录 app/build/reports/jacoco/jacocoTestReport/html/ 中生成

enter image description here

enter image description here

考虑到影响结果的因素数量(例如所有相关组件的版本——Android SDK、设备、Kotlin 编译器、Gradle、JaCoCo 等),试图猜测你的情况有什么不同是 IMO 适得其反,因此,最好的建议是对您的设置与上述示例之间的差异进行非常仔细的比较。


更新

正如@HeWhoProtects 在比较过程中发现的那样,问题出在

exclusion of **/*$*

指的是从分析中排除类文件。单个源文件可以编译成多个类文件,例如在 Java 中嵌套类的情况下以及在 Kotlin 中完全相同的情况下,在这两种情况下,类和类文件的名称都将包含 $

关于android - Kotlin Jacoco 覆盖率未显示 Android 中的静态方法(伴侣),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54075424/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com