代码覆盖内联函数

els*_*nov 5 android unit-testing code-coverage inline-functions kotlin

我有这个用 Kotlin 编写的函数

inline fun <T> handleEmptyResult(observable: Observable<T>,
                                 crossinline resultEmptyCheckingFunc: (obj: T?) -> Boolean): Observable<T> {
    return observable
        .flatMap {
            if (resultEmptyCheckingFunc(it)) {
                Observable.error<T>(ResultEmptyError(Throwable()))
            } else {
                Observable.just(it)
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

但是当我为此函数创建单元测试时,它在报告上显示 0 覆盖率。我正在使用 jacoco 进行代码覆盖。你们知道如何正确地对内联函数进行单元测试吗?谢谢!

vod*_*dan 0

由于代码是内联的,因此您的测试中没有对此函数的调用,并且jacoco认为您从未使用过它。

一个建议:忘记测试覆盖率,它完全没有用。一个项目可以有很好的测试和 30% 的覆盖率。或者有人可能花费大量时间来获得 100% 的覆盖率,但生产中仍然存在数十个错误。我都看过。

  • 顺便说一句,上面的回复没有回答问题 (13认同)
  • 尽管如此,当不清楚哪些代码路径被使用/覆盖、哪些没有被使用/覆盖时,覆盖率**还是**好的,尤其是在遗留代码中。 (2认同)