如何使用 MockK 模拟局部变量

How to mock local variables using MockK

我有以下简化代码

class Foo() {
    suspend fun bar() {
        val headers = AtomicReference(Metadata())
        val metadata = headers.get()
        if (metadata.keys().size > 0) { // I want it to return a value specified in the test file
            // ...
    }
}

我如何模拟 AtomicReferenceMetadata 以便 headers.get().keys().size returns 指定值而不是真实值?

您可以使用 Constructor Mocks 模拟 Metadata 的构造函数:

mockkConstructor(Metadata::class)

every { anyConstructed<Metadata>().keys() } returns mockedKeys

注意 keys 的 mockedKeys 是你的测试数据。

https://mockk.io/#constructor-mocks

此外,尝试以不需要模拟任何构造函数的方式构建您的代码(例如使用控制反转),您会发现它在测试时会带来好处。