Автоматически сгенерированный макет сеттера в Котлине с Mockito - PullRequest
0 голосов
/ 24 апреля 2018

Допустим, у меня есть следующий интерфейс:

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

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...