Модульное тестирование - как проверить метод, который принимает лямбда-функцию? - PullRequest
0 голосов
/ 21 февраля 2019

Может кто-нибудь помочь мне понять, как я могу эффективно тестировать приведенный ниже код.его kotlin, но может быть что угодно:

 myMainObject.doSomethingSpecial({ differentObject ->
                differentObject.doFirst()
                differentObject.doSecond()
                differentObject.doThird()
            })

Я хотел бы проверить, что doSomethingSpecial действительно работает.

Я думал о попытке высмеять лямбду:

val function1: () -> Int = mock()
    whenever(function1.invoke())
        .thenReturn(1)

но это не то, чего я действительно хочу.я хочу проверить, что все методы в lamda вызывают, поэтому я хочу проверить, что все doFirst, doSecond, doThird и т. д. все вызываются, я думаю, как лучше всего провести модульное тестирование.я должен использовать захват аргумента для этого, как?Чтобы было ясно, мой вопрос заключается в том, как провести модульное тестирование метода doSomethingSpecial?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете попытаться разделить задачу на две более простые задачи:

  1. вы можете проверить doSomethingSpecial (который, я полагаю, вызывает функцию, получающую параметр), передав fake функция в качестве параметра и тестирование ее назвали
  2. вы можете проверить лямбду, дав ей имя, и протестировать ее как функцию: вы вызываете ее, передавая mock для differentObject и тест *Метод 1012 * mock был назван

Итак, в псевдокоде:

val myFunction = { differentObject ->
        differentObject.doFirst()
        differentObject.doSecond()
        differentObject.doThird()
        differentObject.doFourth()
        differentObject.doFifth()
}
myMainObject.doSomethingSpecial(myFunction)

// Invoke doSomethingSpecial with fake parameter
val fakeFunction = ...
myMainObject.doSomethingSpecial(fakeFunction)
// Assert fakeFunction was called

// Invoke myFunction with mock parameter
val mockObject = ...
myFunction(mockObject)
// Assert mockObject.doNth was called

Я надеюсь, что этот подход может помочь вам найти реальное решение!

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