我想对一些看起来类似于此的代码的返回值进行单元测试:
Groovy Service code to test:
def findByThisAndThat(something) {
:
def items = []
sql.eachRow(query, criteriaList, {
def item = new Item(name:it.NAME)
items.add(item)
})
[items: items, whatever:whatevervalue]
}
单元测试代码计划:
void testFindByThisAndThatReturnsAMapContainingItems(){
Sql.metaClass.eachRow = { String query, List criteria, Closure c ->
// call closure to get passed in items list
// add one new Item(name:"test item") to list
}
def result = service.findByThisAndThat("", "")
assert result.items
assertEquals('test item', result.items[0].name)
}
我该怎么做? 谢谢!
最佳答案
像您提议的单元测试实际上只是测试从数据库中提供适当的数据,您将它正确地组装到 Item 实例中。我会改用集成测试,您可以在其中访问真实数据库并使用数据库中的测试数据测试整个方法。
单元测试数据库访问通常更多地是对模拟代码的测试,而不是对您的代码的测试,因此通常用处不大。
关于testing - 如何模拟闭包以测试 Grails 服务结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742571/