unit-testing - 为什么此模拟 'return'是一个Closure,而不是实际的返回值?

标签 unit-testing grails groovy mocking spock

我在Spock规范中 mock 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)。

这是怎么了?我该如何纠正错误?

最佳答案

您正在调用suggestQuery(String, Map),但在 mock suggestQuery(Map)。尝试

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

关于unit-testing - 为什么此模拟 'return'是一个Closure,而不是实际的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7651207/

相关文章:

grails - Grails/GORM-相当于JPA @ElementCollection

jdbc - 无法从groovy连接到oracle数据库

groovy - 使用 Spock 在多个返回结果中抛出 IOException

grails - Swaggydoc插件grails 3.2.1

jenkins - 我可以检查 Jenkinsfile 中是否存在环境变量

java - 对象没有被 mock 。抛出空指针异常

java - 使用 hamcrest 的 Assert.fail 等效项

java - 如何在java中给出时间戳值作为参数?

unit-testing - 使用 Wicket 在单元测试中模拟后退/前进/刷新按钮

grails - 使用 'like'的Grails搜索列表