Допустим, у меня есть следующий интерфейс:
internal interface IRegisters {
var i: Short
var pc: Int
var sp: Int
}
Теперь, когда я компилирую этот интерфейс, публичные поля заменяются геттерами и сеттерами.Я полагаю, что окончательный результат не совсем такой, но давайте предположим, что это ради простоты:
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 я могу издеваться над частью получения следующим образом:
Mockito.`when`(registersMock.sp).thenReturn(16)
Что, я полагаю, в какой-то момент процесса компиляции заменяется за кулисами примерно так:
Mockito.`when`(registersMock.getSp()).thenReturn(16)
Я убедился, что это действительно правильно, заменив часть .thenReturn
на.thenAnswer
.invocation.method
при вызове метода ответа answer
действительно был getSp
.
Мой вопрос: как мне посмеяться (если это вообще возможно) противника set
?
Я пробовал это:
Mockito.`when`(registersMock.sp = ArgumentMatchers.anyInt()).then...
Но он говорит мне, что присваивания не являются выражениями, и в этом контексте допускаются только выражения .И, поскольку setSp(value: Int)
еще не существует, я также не могу сделать следующее:
Mockito.`when`(registersMock.setSp(ArgumentMatchers.anyInt())).then...
... так как это дает неразрешенную ссылку ошибку (которая являетсяразумно, так как поведение является последовательным, если я пытаюсь getSp()
аналог).
Это особенно бесит, потому что я могу проверить метод setSp
, используя назначение =
следующеепуть:
Mockito.verify(
registersMock,
times(1)
).sp = 0x300
Заранее спасибо.