Реализация метода спока не работает при проверке количества вызовов - PullRequest
0 голосов
/ 05 марта 2020

У меня проблема с методами насмешки с использованием Спока. Ниже приведен код, который я использую. Без каких-либо изменений все работает - фиктивная реализация работает правильно и возвращает «фиктивную» строку. Однако, если я раскомментирую строку с проверкой вызова (3 * notifier.test ()), моя фиктивная реализация для метода notify не будет вызвана и тесты завершатся неудачно, потому что notifier mock возвращает ноль. Почему это так работает?

class Aaaaa extends Specification {
    class Notifier {
        def test() {
            println("Called in impl...")
            return "impl"
        }
    }

    def "Should verify notify was called"() {
        given:
        Notifier notifier = Mock(Notifier)
        notifier.test() >> {
            println("Called in mock...")
            return "mock"
        }

        when:
        notifier.test()
        notifier.test()
        def result = notifier.test()

        then:
//        3 * notifier.test()
        result == "mock"
    }
}

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Чтобы опубликовать актуальный ответ для тех, кто подписался:

    def "Should verify notify was called"() {
        given:
        Notifier notifier = Mock(Notifier)

        when:
        notifier.test()
        notifier.test()
        def result = notifier.test()

        then:
        3 * notifier.test() >> {
            println("Called in mock...")
            return "mock"
        }
        result == "mock"
    }
2 голосов
/ 05 марта 2020

Разделение заглушки и насмешки в стиле Мокито на два отдельных утверждения не будет работать

Из документов: http://spockframework.org/spock/docs/1.0/interaction_based_testing.html#_combining_mocking_and_stubbing

Это требуется определить номер вызова в той же строке, где определен метод макета

...