我需要验证是否使用 MockK 库调用了
bar
函数。
我的文件.kt
fun foo() {
bar()
}
private fun bar() { ... }
如何模拟“bar”功能?
我正在尝试以下方法。
@Test
fun test() {
mockkStatic("com.mypkg.MyFileKt")
every { bar() } returns Unit
foo()
verify(exactly = 1) { bar() }
}
这会产生编译时错误:
Cannot access 'bar': it is private in file
。
如果我将栏功能设置为内部,效果就很好。也许我必须监视它,但找不到一个例子来做到这一点。
虽然我认为模拟私有方法不是一个好主意,因为它们很可能应该与调用它们的方法结合起来进行测试,但 MockK 确实支持这一点: https://mockk.io/#private-functions-mocking--dynamic-calls
所以你的代码看起来像这样:
class TheClass {
fun foo() {
bar()
}
private fun bar() {}
}
@Test
fun theTest() {
val mock = spyk<TheClass>(recordPrivateCalls = true)
every { mock["bar"]() } returns Unit
mock.foo()
verify(exactly = 1) { mock["bar"]() }
}
使用类似这样的东西:
@SpyK(recordPrivateCalls = true)
private val foo = mockk<Foo>()
every { foo.someMethod(any()) } returns "something..."