为什么这个模拟'返回'一个Closure而不是实际的返回值?

时间:2011-10-04 16:40:07

标签: unit-testing grails groovy mocking spock

我在Spock规范中嘲笑SearchableService:

// 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期望(String,String),但是得到(String,Closure)。

这里有什么问题?如何更正错误?

1 个答案:

答案 0 :(得分:4)

您正在呼叫suggestQuery(String, Map),但您正在嘲笑suggestQuery(Map)。尝试

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