Mock-Signature в Spock-Test-Framework выглядит не так, как в документах - PullRequest
0 голосов
/ 15 мая 2018

в Spock-Docs, Mock / Spy / Stub с использованием аргументов конструктора, дается с такой подписью:

def subscriber = Spy(SubscriberImpl, constructorArgs: ["Fred"])

(см .: http://spockframework.org/spock/docs/1.1/all_in_one.html#Spies)

Однако в споке.mock.MockingApi, есть несколько подписей для каждого Spy / Mock / Stub, но если у них есть дополнительные аргументы, у них есть карта в качестве первого аргумента, а затем класс для имитации, например

public <T> T Spy(Map<String, Object> options, Class<T> type)

Теперь у меня есть два вопроса:

1) Как Groovy / Spock заставляет тест работать, если я использую порядок как в документах?На самом деле, это работает ...

2) Весь вопрос возник у меня после обновления IntelliJ с 2017.3 до 2018.1, после которого IntelliJ отказался принять подписчика (в примере выше) как объект типаSubscriberImpl, который он делал до обновления - код не изменился ... Если я переверну вещи и добавлю еще один Bracket и "as Map", все будет нормально, так как это близко к коду в MockingApi:

def subscriber = Spy([constructorArgs: ["Fred"]] as Map<String, Object>, SubscriberImpl)

Но в любом случае, как это изменило поведение с обновлением и как оно работало раньше?Может быть, кто-то может облегчить мое замешательство ...?

Спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Это встроенная функция Groovy для преобразования именованных параметров в карту, см.

Относительно того, почему IDEA ведет себя так, как вы описали, я не знаю. Я также использую IDEA 2018 и вижу то же самое. Найдите базу данных ошибок JetBrains и создайте ее, если она еще не существует. В любом случае, это всего лишь косметическая вещь, но было бы неплохо исправить. Кстати, вы также можете исправить окрашивание фона в среде IDE из-за сигнатуры метода, например:

def subscriber = Spy(SubscriberImpl as Class, constructorArgs: ["Fred"])

Или вот так (более элегантно, а также более безопасно):

SubscriberImpl subscriber = Spy(constructorArgs: ["Fred"])
...