使用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()