无法使用具有createCriteria()语句的函数执行单元测试

时间:2011-03-22 03:39:56

标签: groovy createcriteria unit-testing

我想编写一个单元测试(通过JUnit)来测试Groovy中这个函数的值:

    String getPeopleNamesById(int[] peopleIds) {
        List<String> names = People.createCriteria().list{
            projections { property("name") }
            'in' ("id", peopleIds)
        }
        return names ? names.join(", ") : "";
    }

但是单元测试总是在读取此语句时失败:List names = People.createCriteria()。list {...} groovy.lang.MissingMethodException:没有方法签名:People.createCriteria()适用于参数类型:()values:[]。 我想是因为调用执行某些数据库连接和查询的函数? 你能帮我写这个测试吗?非常感谢你!

1 个答案:

答案 0 :(得分:3)

标准查询在单元测试中不可用,并且不由mockDomain提供。您可以自己模拟标准查询,例如使用mockFor,或者让您的测试成为集成测试,您可以访问完整的数据库环境。

以下是如何模拟查询的示例:

mockFor(People).demand.static.createCriteria = { ->
    [list: { closure -> [ <some mock objects> ] } ]
}