调用 spyk 数据的函数 class
Calling a function of a spyk'd data class
我有一个数据class 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")
}
当我 运行 编写这样的测试时,它失败并在数据 class 中的 fun foo... 行出现 NullPointerException。 =13=]
我是不是做错了什么或者这是 MockK 中的错误?
当我 运行 你的代码时,我得到了完全不同的结果。首先它抱怨没有默认构造函数。
然后我将其修复为使用非默认构造函数并打印 "abc Snake"
val spy = spyk(A("abc"))
every { spy.a } returns "Tree"
println(spy.foo("Snake"))
这是有原因的。 Kotlin 正在通过 foo
函数中的字段访问 a
属性。这似乎是一种优化。
MockK 目前无法对此做任何事情。有如下ticket to transform getfield
call: https://github.com/mockk/mockk/issues/104
我有一个数据class 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")
}
当我 运行 编写这样的测试时,它失败并在数据 class 中的 fun foo... 行出现 NullPointerException。 =13=]
我是不是做错了什么或者这是 MockK 中的错误?
当我 运行 你的代码时,我得到了完全不同的结果。首先它抱怨没有默认构造函数。
然后我将其修复为使用非默认构造函数并打印 "abc Snake"
val spy = spyk(A("abc"))
every { spy.a } returns "Tree"
println(spy.foo("Snake"))
这是有原因的。 Kotlin 正在通过 foo
函数中的字段访问 a
属性。这似乎是一种优化。
MockK 目前无法对此做任何事情。有如下ticket to transform getfield
call: https://github.com/mockk/mockk/issues/104