相关疑难解决方法(0)

如何避免 Kotlin 中的 Lateinit 字段部分覆盖

我有一个用 Kotlin 编写的 Android 服务,我使用 Guice 注入它。它有不能为空的 Lateinit 字段,但它们必须是 Lateinit 因为我不能使用构造函数注入。

围绕这些线的一些东西:

class VibrationService : Service() {
    @Inject
    private lateinit var pm: PowerManager
    private lateinit var wakeLock: WakeLock

    override fun onCreate() {
        AlarmApplication.guice().injectMembers(this)
        wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "VibrationService")
        wakeLock.acquire()
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我创建 JaCoCo 报告时,访问任何 Lateinit 字段的所有行都被标记为部分覆盖。我认为 Kotlin 编译器对字节码添加了一些检查,以确保字段在访问之前已初始化。

有什么办法可以禁用这些检查吗?我想要 100% 的覆盖率:-)

android kotlin

8
推荐指数
1
解决办法
3157
查看次数

如何将 Kotlin 源码的测试报告上传到 Coveralls?

我想在 Travis 构建完成后自动将我的 Jacoco 测试报告上传到 Coveralls。它适用于 Java,但如何为 Kotlin 配置它?

错误信息

我可以在本地和 Travis 上生成 Jacoco 测试报告,但是当 Travis 尝试提交给工作服时,它会失败并显示消息

> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml
Run Code Online (Sandbox Code Playgroud)

Google 将我链接到 Gradle 插件实现,它显示了它在哪里抛出此消息,它告诉我(我认为)找到了 Jacoco 报告文件,但没有找到工作人员显然需要的源文件。

我试过的

因此,我尝试通过所有这些方式将工作服任务指向我的源文件:

coveralls {
    sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
    sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
    project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
    sourceDirs += ['src/test/kotlin']
    sourceDirs += ["${projectDir}/src/main/kotlin"]
}
Run Code Online (Sandbox Code Playgroud)

我也尝试添加sourceSets project.sourceSets.mainjacocoTestReport任务中。

项目设置

我的最小build.gradle文件:

plugins {

    id 'org.jetbrains.kotlin.jvm' …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco kotlin coveralls gradle-kotlin-dsl

7
推荐指数
1
解决办法
858
查看次数

CI 管道中的 Kotlin 代码覆盖率

有兴趣寻找在 CI 管道中运行良好的 kotlin 代码覆盖率工具。使用 intellij 内置代码覆盖率,但不能在 CI 中使用它。谢谢

continuous-integration code-coverage kotlin

6
推荐指数
1
解决办法
2536
查看次数

测量Kotlin代码的测试覆盖率?

有没有办法测量Kotlin代码的测试覆盖率?Jacoco给出了错误的结果,因为无法确定自动生成的代码.还有其他解决方案吗?

code-coverage kotlin

6
推荐指数
1
解决办法
814
查看次数