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

Ash*_*win 8 kotlin mockk

我需要验证是否bar使用 MockK 库调用了函数。

我的文件.kt

fun foo() {
    bar()
}

private fun bar() { ... }
Run Code Online (Sandbox Code Playgroud)

我如何模拟“bar”功能?

我正在尝试以下操作。

@Test
fun test() {
    mockkStatic("com.mypkg.MyFileKt")

    every { bar() } returns Unit

    foo()

    verify(exactly = 1) { bar() }
}
Run Code Online (Sandbox Code Playgroud)

这会产生编译时错误:Cannot access 'bar': it is private in file

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

Eri*_*man 6

虽然我认为模拟私有方法不是一个好主意,因为它们很可能应该与调用它们的方法结合起来进行测试,MockK 确实支持这一点: https: //mockk.io/#private-functions-mocking- -动态调用

所以你的代码看起来像这样:

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"]() }
}
Run Code Online (Sandbox Code Playgroud)

  • 这会起作用,我只是想知道 MockK 是否可以模拟/监视 Kotlin 顶级私有函数。 (2认同)