【问题标题】:Mockk Mocking Private Properties in KotlinMockk 模拟 Kotlin 的私有财产
【发布时间】:2020-08-30 07:56:36
【问题描述】:

我有一个带有私有字段的简单类。

class EmployeeData {

    private var employeeAge: Int = 0
    
    fun getAge(): Int {
        return 1 + employeeAge
    }
}

我正在尝试使用官方文档中的以下内容来测试这个私人 employeeAge

@Test
fun testPrivateAge() {

    val mock = spyk(EmployeeData())

    every {
        mock getProperty "employeeAge"
    } propertyType Int::class answers { fieldValue + 6 }
    every {
        mock setProperty "employeeAge" value any<Int>()
    } propertyType Int::class answers  { fieldValue += value }


    every { mock getProperty "employeeAge" } returns 33
    every { mock setProperty "employeeAge" value less(5) } just Runs

    assertEquals(10,mock.getAge())
}

我从 MockK 收到这样的异常

io.mockk.MockKException: Missing calls inside every { ... } block.

at io.mockk.impl.recording.states.StubbingState.checkMissingCalls(StubbingState.kt:14)
at io.mockk.impl.recording.states.StubbingState.recordingDone(StubbingState.kt:8)

关于我做错了什么的任何线索?官方文档建议对私有属性使用这种技术,但对我来说它不起作用,我正在使用最新版本的 MockK,即 v1.10.0

虽然对于私有方法来说,它的工作原理很吸引人。我可以在这个逻辑中测试私有方法。

【问题讨论】:

标签: android unit-testing testing mockk


【解决方案1】:

这是一些 Kotlin 优化的问题。根据 MockK 作者“简要说明。模拟私有属性几乎是不可能的,因为它们没有附加 getter 方法。这是一种 Kotlin 优化,解决方案是重大变化。”

可以在这 2 个 Github 问题上找到更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多