Как использовать шпион - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно убедиться, что для объекта был вызван метод. Итак, я делаю слежку за этим объектом:

obj = spyk(obj)

И затем проверяю, что метод был вызван:

verify(exactly = 1) { obj.f(3) }

Тест не проходит со следующим сообщением об ошибке:

java.lang.AssertionError: Verification failed: call 1 of 1: obj(#2).f(eq(3))) was not called.

Однако я ясно вижу вызываемый метод f:

  1. Я могу сломать этот метод в режиме отладки
  2. Я распечатываю hello world from f() в этот метод и увидеть, как он распечатывается.

Как правильно использовать шпионов в mockk?

PS

Я пробовал делать val obj = spyk(obj()), но получаю lateinit has not been initialized error потому что мне нужно установить параметр в obj так:

obj.setDependency(friend)

Но в случае, когда я сначала делаю val obj = spyk(obj()), а затем вызываю obj.setDependency(friend), как я объяснил выше, я получаю lateinit has not been initialized error

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 09 июля 2020

В вашем случае я не понимаю эту часть obj = spyk(obj). Что ты здесь делаешь? Я думаю, что эта часть даже не компилируется.

Вы получаете lateinit has not been initialized error, потому что spyk(obj()) вызывает настоящий конструктор. Если у вашего объекта есть зависимости, вы должны также их создать или передать mockk вместо них.

Согласно документации:

Примечание: объект-шпион является копией переданный объект.

Вы должны создать этот объект как обычный объект, поэтому должны быть заполнены все зависимости.

Я использую spyk таким образом, позвольте мне показать вам быстрый пример.

    fun `should call method testMethod`() {
    val spy = spyk<TestClass>()

    spy.testMethod(1)

    verify (exactly = 1) { spy.testMethod(1) }
}
...