Unit testing 为什么要模拟';返回';与实际返回值相反的闭包?

Unit testing 为什么要模拟';返回';与实际返回值相反的闭包?,unit-testing,grails,groovy,mocking,spock,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

我在模仿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
持有一个闭包,而不是定义的字符串

正如HighlightTermDiff所期望的那样,final语句失败(String,String),但正在获得(String,Close)


这里怎么了?如何更正错误?

您正在调用
suggestQuery(String,Map)
但您正在模拟
suggestQuery(Map)
。试一试

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

您正在调用
suggestQuery(String,Map)
但正在模拟
suggestQuery(Map)
。试一试

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

不确定为什么我没有评论/接受你的答案。目前适用,因此我将在能够测试您的建议时进行检查。不确定为什么我错过了评论/接受您的答案。目前适用,所以当我能够测试您的建议时,我会回来检查。