kotlin - 模拟私有财产
问题描述
假设我们有一个这样的类:
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
解决方案
尝试使用答案而不是返回,如下所示:
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
}
推荐阅读
- php - 在 laravel/cashier 中应用促销代码而不是优惠券
- c++ - c++ 当引用变量的值改变时?
- javascript - Chart.js - 向折线图背景添加渐变
- python - 未找到 Ubuntu 命令“pip”,但有 18 个类似的命令(熊猫)重新安装正常工作
- node.js - EC2 实例更改了公共 IP 地址。我可以重新找回旧的 IP 地址吗?
- python - 将抓取的数据转换/清理为熊猫数据框 python
- ios - 使用单视图控制器添加和编辑数据?
- json - 无法使用 jolt 将 json 列表转换为对象
- php - 如何使用 Cakephp 4 访问 REST 控制器
- r - 访问嵌套列表中的数据框