Вызов функции класса данных spyk'd
У меня есть класс данных A с функцией следующим образом:
data class A(val a: String) {
fun foo(b: String) = "$a, $b"
}
Я пытаюсь в следующем тесте:
fun `whatever`() {
val spy = spyk<A>()
every { spy.a } returns "Tree"
assertThat(spy.foo("Snake")).isEqualTo("Tree Snake")
}
Когда я запускаю тест, написанный следующим образом, он завершается с ошибкой NullPointerException в строке fun foo... в классе данных.
Я делаю что-то не так или это ошибка в MockK?
1 ответ
Решение
У меня совершенно разные результаты, когда я запускаю ваш код. Во-первых, он жалуется, что нет конструктора по умолчанию.
Затем я исправил это использование конструктора не по умолчанию, и он печатает "abc Snake"
val spy = spyk(A("abc"))
every { spy.a } returns "Tree"
println(spy.foo("Snake"))
Для этого есть причина. Kotlin получает доступ a
собственность через поле в foo
функция. Это похоже на оптимизацию.
MockK сейчас ничего не может с этим поделать. Есть следующий билет для трансформации getfield
позвоните: https://github.com/mockk/mockk/issues/104