首页 > 解决方案 > 模拟私有财产

问题描述

假设我们有一个这样的类:

class Whatever {
    private var something = false

    fun aMethod(): Int {
        return if( something ) {
            1
        } else {
            0
        }
    }
}

根据文档,看起来我应该能够执行以下操作:

val classUnderTest = spyk(Whatever())

every { classUnderTest getProperty "something" } returns true

assertThat(classUnderTest.aMethod()).isEqualTo(1)

但是我得到了错误:io.mockk.MockKException: Missing calls inside every { ... } block

我正在使用 mockk 1.8.5,kotlin 1.2.51

标签: kotlinmockk

解决方案


尝试使用答案而不是返回,如下所示:

val mock = spyk(MockCls(), recordPrivateCalls = true)

every { mock.property } answers { fieldValue }
every { mock getProperty "property" } propertyType Int::class answers { fieldValue + 6 }
every { mock setProperty "property" value any<Int>() } propertyType Int::class answers  { fieldValue += value }
every { mock.property = any() } propertyType Int::class answers {
  fieldValue = value + 1
} andThen {
  fieldValue = value - 1
}

推荐阅读