спок издевается: захват arg и заглушка возвращаемое значение - можно разделить? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть тест, который требует:

  1. проверки взаимодействия (метод был вызван и с правильными аргументами)
  2. mock должен вернуть какое-то мягкое возвращаемое значение, поэтомукак не вызывать побочных эффектов.

Прикрепленный код делает это, но мне интересно, есть ли более читаемый способ сделать это.В частности, я думаю, что было бы хорошо отделить биты насмешки (# 1) от битов заглушки (# 2).

Есть предложения?

Спасибо!

def "foo"() {
    setup:
    Payload payload
    Collaborator mock = Mock()
    underTest.collaborator = mock

    when: "doing something"
    underTest.doSomething()

    then: "collaborator's func is called once"
    1 * mock.func(*_) >>  { args ->
        payload = args[0] // 1. capture arg for inspection
        SOME_RETURN_VAL // 2. return a canned response
    }
    and: "collaborator is passed correct args"
    with(payload) {
        //...do some verification over payload
    }
}

1 Ответ

0 голосов
/ 23 декабря 2018

Давайте посмотрим документацию Спока , ладно?

Сочетание насмешек и окурков

Насмешки и окурки идут рука об руку:

1 * subscriber.receive("message1") >> "ok"
1 * subscriber.receive("message2") >> "fail"

При издевательстве и заглушении одного и того же вызова метода они должны происходить в одном взаимодействии.В частности, следующее разделение заглушки и насмешки в стиле Mockito на два отдельных оператора будет не работать:

given:
subscriber.receive("message1") >> "ok"

when:
publisher.send("message1")

then:
1 * subscriber.receive("message1")

Как объяснено в разделе «Где объявлять взаимодействия», receiveСначала вызов будет сопоставлен с взаимодействием в блоке then:.Поскольку в этом взаимодействии не указан ответ, будет возвращено значение по умолчанию для типа возврата метода (в данном случае null).(Это просто еще один аспект мягкого подхода Спока к насмешкам.)Следовательно, взаимодействие в блоке given: никогда не получит совпадения.

NOTE

В одном и том же взаимодействии должно происходить насмешка и заглушка одного и того же вызова метода.

...