使用Mockito在Kotlin中模拟自动生成的setter

使用Mockito在Kotlin中模拟自动生成的setter,kotlin,mockito,Kotlin,Mockito,假设我有以下界面: internal interface IRegisters { var i: Short var pc: Int var sp: Int } 现在,当我编译该接口时,公共字段被getter和setter替换。我认为最终结果并非如此,但为了简单起见,我们假设: internal interface IRegisters { fun getI(): Short fun setI(value: Short) fun getPc():

假设我有以下界面:

internal interface IRegisters {
    var i: Short
    var pc: Int
    var sp: Int
}
现在,当我编译该接口时,公共字段被getter和setter替换。我认为最终结果并非如此,但为了简单起见,我们假设:

internal interface IRegisters {
    fun getI(): Short
    fun setI(value: Short)
    fun getPc(): Int
    fun setPc(value: Int)
    fun getSp(): Int
    fun setSp(value: Int)
}
我的问题是:使用Mockito,我可以用以下方式模拟getter部分:

Mockito.`when`(registersMock.sp).thenReturn(16)
Mockito.verify(
    registersMock,
    times(1)
).sp = 0x300
我想在编译过程中的某个时候,它会在幕后被替换,例如:

Mockito.`when`(registersMock.getSp()).thenReturn(16)
我验证了将
替换为
。然后返回
部分。然后回答
。调用应答的
answer
方法时的
invocation.method
实际上是
getSp

我的问题是:如何模拟(如果可能的话)设置对应的

我试过这个:

Mockito.`when`(registersMock.sp = ArgumentMatchers.anyInt()).then...
但它告诉我赋值不是表达式,在这个上下文中只允许表达式。而且,由于
setSp(value:Int)
还不存在,我也无法执行以下操作:

Mockito.`when`(registersMock.setSp(ArgumentMatchers.anyInt())).then...
…因为它给出了一个未解决的引用错误(这是合理的,因为如果我尝试
getSp()
对应项,行为是一致的)

这特别令人愤怒,因为我可以通过以下方式使用
=
赋值来验证
setSp
方法:

Mockito.`when`(registersMock.sp).thenReturn(16)
Mockito.verify(
    registersMock,
    times(1)
).sp = 0x300

提前谢谢。

花了一些时间,但我发现有些东西起作用了。诀窍是在任何时候交换
doAnswer
。 例如,我可以在调用setter时提取传入的Int。 工作解决方案:

源代码: 模拟测试:

val mockIRegister=mock()
变量lastSp:Int?=无效的
拒绝{调用->
lastSp=invocation.getArgument(0)为?Int
}
.无论何时(模拟注册表)
.sp=anyInt()