testing - 如何模拟闭包以测试 Grails 服务结果?

标签 testing grails groovy mocking metaclass

我想对一些看起来类似于此的代码的返回值进行单元测试:

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/

相关文章:

javascript - 如何在 Protractor 中使用 browser.get()

grails - 在Grails中解码Base64字符串

Grails/Groovy 不会在对象的集合中持续更改

java - 为什么类不在 gmaven-plugin 脚本中的类路径中?

Grails 配置文件返回空对象而不是字符串

C - 测试主要功能的最简单方法是什么?

安卓测试。使用 Espresso 的一系列点击

java - 在哪里可以找到数学解析器/引擎的测试?

grails - Weceem插件和Grails关于内容发布工作流程

caching - 如何在Grails中启用缓存的情况下将不同服务器同步到GORM层