【发布时间】:2017-02-10 14:00:59
【问题描述】:
标有 inline 关键字的 Kotlin 函数在编译期间是内联的,而且代码覆盖率工具(如 JaCoCo)似乎无法正确计算代码覆盖率。克服这个问题的通常方法是什么?有没有办法让测试以某种方式避免内联步骤并直接调用测试的方法?是否可以在不排除整个类的情况下跳过所有内联方法的报告生成(例如通过 Gradle 任务)?
【问题讨论】:
标签: testing gradle code-coverage kotlin jacoco
标有 inline 关键字的 Kotlin 函数在编译期间是内联的,而且代码覆盖率工具(如 JaCoCo)似乎无法正确计算代码覆盖率。克服这个问题的通常方法是什么?有没有办法让测试以某种方式避免内联步骤并直接调用测试的方法?是否可以在不排除整个类的情况下跳过所有内联方法的报告生成(例如通过 Gradle 任务)?
【问题讨论】:
标签: testing gradle code-coverage kotlin jacoco
我认为关闭内联是不可能的,因为如果某些函数没有内联,它们可能没有任何意义。这些包括具有reified 类型的函数(因为内联创建了类型信息的可用性)和以 lambda 作为参数的函数,因为它们会影响内联方法的控制流。
【讨论】:
JetBrains Java Coverage 工具中存在错误,请参阅https://youtrack.jetbrains.com/issue/KT-12605。
所以,等到 bug 被修复(或投票,以加快开发速度)
【讨论】:
Kotlin 团队推出了Kover 插件,旨在支持包括内联函数在内的所有语言结构。
【讨论】: