android - Mockk 模拟 Kotlin 的私有财产
问题描述
我有一个带有私有字段的简单类。
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。
尽管对于私有方法,它的工作原理很吸引人。我能够在这个逻辑中测试私有方法。
解决方案
这是一些 Kotlin 优化的问题。根据 MockK 作者“简要说明。模拟私有属性几乎是不可能的,因为它们没有附加 getter 方法。这是一种 Kotlin 优化,解决方案是重大变化。”
可以在这 2 个 Github 问题上找到更多信息:
推荐阅读
- python - 用户输入的 Python 方程
- c# - SFSafariViewController 和 ChromeCustomTabs 内的 Xamarin.UITest 查询元素
- spring - WebMvcConfigurationSupport 在 SpringBoot 中产生错误
- visual-studio-code - 在 Visual Studio Code 的源代码管理中查看嵌套存储库的更改
- php - PHP + SQL : 搜索同一天、同一月、不限年份的事件
- python - 在 BeautifulSoup 中,如何搜索包含文本但也具有某个类的祖先的元素?
- android - 用“Region.Op.REPLACE”替代已弃用的“canvas.clipRect”?
- angular - 当用户插入空格时如何阻止此搜索功能中断
- python - 通过ansible执行带有args pars的python脚本
- azure - 在 Powershell 中创建 Azure API 管理标签