调用spyk数据类的函数

时间:2018-10-03 23:20:47

标签: mockk

我有一个数据类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")
}

当我运行这样的测试时,它在数据类的 fun foo ... 行中失败,并显示NullPointerException。

我做错什么了吗,或者这是MockK中的错误?

1 个答案:

答案 0 :(得分:1)

运行您的代码时,我得到的结果完全不同。首先,它抱怨没有默认构造函数。

然后我将其修复为使用非默认构造函数,并显示"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