Вызов функции класса данных spyk'd - PullRequest
0 голосов
/ 04 октября 2018

У меня есть класс данных 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 Ответ

0 голосов
/ 04 октября 2018

У меня совершенно разные результаты, когда я запускаю ваш код.Во-первых, он жалуется на отсутствие конструктора по умолчанию.

Затем я исправил его, чтобы использовать конструктор не по умолчанию, и он печатает "abc Snake"

val spy = spyk(A("abc"))
every { spy.a } returns "Tree"
println(spy.foo("Snake"))

Для этого есть причина.Kotlin обращается к свойству a через поле в функции foo.Это кажется оптимизацией.

getfield call

MockK не может ничего с этим сделать в данный момент.Существует следующий билет для преобразования getfield вызова: https://github.com/mockk/mockk/issues/104

...