gpt4 book ai didi

java - Jacoco 提示不太可能丢失分支覆盖

转载 作者:行者123 更新时间:2023-12-02 12:45:17 26 4
gpt4 key购买 nike

我正在使用 Gradle 6.3 和 Jacoco 来编译、测试和显示覆盖率报告。但我不明白为什么它提示“错过了 2 个分支中的 1 个”,根本没有分支:

1 of 2 branches missed

这是完整的 Kotlin 数据类:

data class ListNode<T>(var value: T, var next: ListNode<T>?) {

override fun hashCode(): Int = value.hashCode()

}

如果不知何故在幕后有分支,它们是什么以及我如何覆盖它们?

最佳答案

字节码中实际上有两个分支,原因如下。

您正在 Any? 上使用扩展 hashCode() 因为 T 的上限是 Any?,而不是 Any。这个扩展是这样实现的:

public inline fun Any?.hashCode(): Int = this?.hashCode() ?: 0

这意味着在字节码中,您对 value.hashCode() 的调用被替换为 value?.hashCode() ?: 0

在您的测试中,您只涵盖了 value 可能不为 null 的情况,因此分支 ?: 0 未涵盖。

在 JaCoCo 不支持 inline 函数之前,您有两种解决方案:

  • 还介绍了使用 null T 测试 ListNode 的其他分支。
  • 使用 Any 作为 T 的上限:
data class ListNode<T: Any>(var value: T, var next: ListNode<T>?)

关于java - Jacoco 提示不太可能丢失分支覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61168454/

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