我有一个数据类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中的错误?
答案 0 :(得分: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