Как проверить через io.mockk метод, который вызывался несколько раз с разными параметрами? - PullRequest
0 голосов
/ 14 октября 2019

PS: код будет в Koltin

Например, у меня есть класс обслуживания, который что-то делает и внедряет какой-то другой сервис.

class MyService(
   private val someOtherService: OtherService
) {
   fun doSomething() {
       someOtherService.someMethod("foo")
       someOtherService.someMethod("bar")
       someOtherService.someMethod("baz")
   }
}

Вот мой тест для моего класса MyServicewhich насмехается над OtherService:

internal class MyServiceTest {
    @MockkBean(relaxed = true)
    private lateinit var someOtherService: OtherService

    @Test
    fun `my test description`() {
        every { someOtherService.someMethod(any()) } just Runs

        verify(exactly = 1) {
            someOtherService.someMethod(
                    match {
                        it shouldBe "bar"
                        true
                    }
            )
        }
    }

В результате будет ожидаться параметр "bar", но вместо этого он будет "foo", и тест не пройден.

Причина: someOtherService.someMethod("foo") позвонит до someOtherService.someMethod("bar").

Однако я хочу убедиться, что каждый метод вызывается ровно один раз. Как я могу это сделать?

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете просто:

verifySequence {
  someOtherService.someMethod("foo")
  someOtherService.someMethod("bar")
  someOtherService.someMethod("baz")
}

Он проверяет, что только указанная последовательность вызовов была выполнена для указанных макетов.

Порядок проверки Mockk

Если нет, вы можете захватить параметр, используя список, и проверить значения позже.

Захват Mockk

...