Почему этот макет «возвращает» замыкание, а не фактическое возвращаемое значение?

#unit-testing #grails #groovy #mocking #spock

#модульное тестирование #grails #groovy #издевательство #спок

Вопрос:

Я издеваюсь над SearchableService в спецификации Spock:

 // In SearchControllerSpec:
def sControl    = mockFor(SearchableService)
sControl.demand.suggestQuery { Map m -> 'suggested query string' }
controller.searchableService    = sControl.createMock()
  

Тестируемый фрагмент кода выглядит следующим образом:

 // In SearchController:
qSuggestion = searchableService.suggestQuery( query , allowSame:false)

// FAILS:
assert qSuggestion == 'suggested query string'

highlightedSuggestion = StringQueryUtils.highlightTermDiffs(query, qSuggestion)
  

Утверждение не выполняется — по-видимому, из-за того, что qSuggestion оно содержит замыкание, а не определенную строку.

Заключительный оператор завершается ошибкой, поскольку highlightTermDiffs ожидает (строка, строка), но получает (строка, закрытие).

Что здесь не так? Как я могу исправить ошибку?

Ответ №1:

Вы вызываете suggestQuery(String, Map) , но вы издеваетесь suggestQuery(Map) . Попробуйте

 sControl.demand.suggestQuery { String query, Map m -> 'suggested query string' }
  

Комментарии:

1. Не уверен, почему я пропустил комментарий / принятие вашего ответа. В настоящее время jira.grails.org/browse/GPSPOCK-10 применимо, так что я проверю еще раз, когда смогу проверить ваше предложение.