MockK 监视 Kotlin 中的顶级私有函数

问题描述 投票:0回答:2

我需要验证是否使用 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

如果我将栏功能设置为内部,效果就很好。也许我必须监视它,但找不到一个例子来做到这一点。

kotlin mockk
2个回答
6
投票

虽然我认为模拟私有方法不是一个好主意,因为它们很可能应该与调用它们的方法结合起来进行测试,但 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"]() }
}

0
投票

使用类似这样的东西:

@SpyK(recordPrivateCalls = true)
private val foo = mockk<Foo>()

every { foo.someMethod(any()) } returns "something..."
© www.soinside.com 2019 - 2024. All rights reserved.