问题描述
有没有办法改变运行单元测试时调用的属性访问器的返回值?喜欢模拟属性 settingsState
的结果?
我正在学习创建单元测试。该类所做的是将存储的数据带入程序,这些数据以可视化的形式给出。在我的测试中,我想定义那里发生了什么,因为窗口不会在那里打开。
// top-level declaration outside class
val settingsState: ApplicationSettingsState
get() = ServiceManager.getService(ApplicationSettingsState::class.java)
解决方法
settingsState
不是变量。这是一个财产。
我不知道有什么方法可以模拟全局属性(或全局函数)。模拟的工作方式是巧妙地创建一个对象,该对象从外部看起来有点像要模拟的对象,但在内部表现不同。在没有要模拟的对象的情况下,没有办法进行模拟。
也就是说,在字节码级别上没有全局变量、属性等。它们都包含在类中,因为 JVM 喜欢这样。一些巧妙的字节码操作或许能够达到某种效果——但不是 MockK。
如果您有模拟对象,则可以模拟该属性。解释一下文档:
val mock = mockk(Bus())
every { mock getProperty "speed" } returns 33