Спок - смоделируйте метод разными аргументами и разными возвращаемыми значениями - PullRequest
0 голосов
/ 01 февраля 2019
given:
def someService = Mock(SomeService)

1 * someService.processInput(argument1) >> output1
1 * someservice.processInput(argument2) >> output2

Как сделать это одним оператором с предложением with с разными аргументами.Например:

2 * someService.processInput(argument1) >>> [output1, output2]

1 Ответ

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

Я полагаю, что в настоящее время в Споке это невозможно изящно, как вы, вероятно, ожидали.Я только придумал что-то вроде следующего:

def args = [arg1, arg2]
2 * service.processInput({ it == args.removeAt(0) }) >>> [out1, out2]

Не уверен, что это соответствует вашим ожиданиям.Ниже приведена полная спецификация для тестирования этого подхода

class SOSpec extends Specification {
    def "mock a method different arguments and different return values"() {
        when:
        def arg1 = "F"
        def arg2 = "B"
        def out1 = "Foo"
        def out2 = "Bar"
        def service = Mock(SomeService) {
            def args = [arg1, arg2]
            2 * processInput({ it == args.removeAt(0) }) >>> [out1, out2]
        }

        then:
        service.processInput(arg1) == out1
        service.processInput(arg2) == out2
    }
}
...