testing - 如何测试 grails Criteria 查询?

标签 testing grails criteria

第一次发帖在这里,希望对很多人都有帮助。

我正在为一个域编写集成测试,在该域上我有一个使用 withCriteria() 方法的查询。我在网上进行了搜索,发现有很多提供了有关如何模拟条件查询的详细说明,但没有提供有关如何准确测试它的说明。

我已经尝试使用 mockDomain(domain,list) 函数模拟域,然后设置一个域供测试在 setUp() 中使用调用标准,我什么也得不到。 我在这里做了一个类似的 findBy 并得到了结果,但不完全是我正在寻找的结果。我很确定这不仅仅是我的查询,还有标准,我在几个地方读过标准在服务测试中不起作用。到目前为止,该查询在应用程序中对我有用,但我想进行一些测试,以防我的代码库发生变化时引用。

我实际上已经按照许多人的建议完成了,并提取了查询代码并将其作为我域中的静态方法,以便我可以为使用它的测试模拟它,但现在我不知道如何实际测试这部分。我是否需要运行该应用程序并从该角度进行功能测试,或者我可以通过某种方式在 grails 单元/集成测试中执行此操作。我将在下面发布我的查询。

static Attribute getDefinitionsUsingCriteria(List categoryNames, List types){
        def definitions = Definition.withCriteria() {
            and {
                'in'('type', types)
                if (categoryNames) {
                    categories {
                        'in'('name', categoryNames)
                    }
                }
            }
        }
        return definitions
    }

Definitions 有一个字符串属性类型,并且有一个 Set 类型的属性类别,这个集合中的每个元素都有一个 String name 属性。

我对 grails 还是很陌生,已经阅读了很多引用书,令我惊讶的是,到目前为止我读过的所有书籍中都缺少这一点。我希望这只是我的一个错误,并且很容易测试。感谢您的帮助,感谢您阅读这篇长篇文章。

JR.

最佳答案

一种方法:将测试从 test/unit 移动到 test/integration 文件夹。 Criteria 在单元测试中不起作用(那里没有 Hibernate),但在集成中会起作用。切勿在集成测试中使用 mockDomain()

注意:不要将方法设为静态 - 它只会使测试复杂化。

第二种方式:在单元测试中——使用mockDomain()。只需依靠逻辑非常简单这一事实,对除方法之外的所有内容进行单元测试。在 setUp() 中覆盖它,例如:

Definition.metaClass.getDefinitionsUsingCriteria = { List categoryNames, List types ->
    delegate.findAll{ (it.type in types) && 
        (it.categories.find { c -> c in categoryNames }) 
    }
}

关于testing - 如何测试 grails Criteria 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232923/

相关文章:

grails - 根据某些条件取消/阻止域对象的保存?

Java,CriteriaBuilder,带有可选参数的查询 "where"

grails - GORM中的标准制定

php - 如何配置PHPunit测试结果输出到HTML文件?

grails - 嵌套Jasper表达式

chalice 2.0 : Invalid SHA1

hibernate 条件限制 : comparing two properties as simple expression

ruby-on-rails - 如何为模型地理编码设置 VCR 全局磁带?

c++ - boost 测试单元无法调用 mpi 函数

django - 如何使用 django 和 selenium/grid 模拟并行多用户可用性测试?