На самом деле в байт-коде есть две ветви, и вот почему.
Вы используете расширение hashCode()
на Any?
, поскольку верхняя граница T
равна Any?
, а не Any
. Это расширение реализовано следующим образом:
public inline fun Any?.hashCode(): Int = this?.hashCode() ?: 0
Это означает, что в байт-коде ваш вызов value.hashCode()
заменяется на value?.hashCode() ?: 0
.
В своем тесте вы охватываете только случай, когда value
не равен нулю, вероятно, поэтому ветвь ?: 0
не рассматривается.
У вас есть два решения, пока JaCoCo не будет поддерживать inline
функции:
- охватывает также другую ветвь тестирования
ListNode
, используя null
T
. - , используя
Any
в качестве верхней границы T
:
data class ListNode<T: Any>(var value: T, var next: ListNode<T>?)