我想测试一个“withCriteria”关闭,我不知道该怎么做。我看到如何模拟withCriteria调用,但不测试闭包内的代码。当运行执行“withCriteria”的测试时,我不断收到MissingMethodException,即使代码在正常的执行流程下运行正常。有任何想法吗? 谢谢! 史蒂夫
答案 0 :(得分:14)
我不会那样做。相反,我将查询作为静态查找程序方法移动到域类中,并在与真实数据的集成测试中直接测试它。然后,您可以在控制器或服务测试中调用辅助方法时轻松模拟它。
class YourDomainClass {
...
static List<YourDomainClass> findFooBar() {
YourDomainClass.withCriteria {
...
}
}
}
然后在单元测试中:
def results = [instance1, instance2, instance3]
YourDomainClass.metaClass.static.findFooBar = { -> results }
通过这种方式,您可以在集成测试中测试查询是否适用于内存数据库,但在单元测试中很容易模拟它。
答案 1 :(得分:1)
除了Burt的回答,请查看如下所述的命名查询:
http://blog.springsource.com/2010/05/24/more-grails-1-3-features/
然后,您可以按照Burt。
所述模拟单元测试中的属性/方法访问答案 2 :(得分:1)
由于没有人提到创建DSL以运行其他DSL的选项,因此完全披露了这种方法。我经常使用它并获得非常好的结果。
答案 3 :(得分:0)
目前没有针对Hibernate标准的模拟实现。您需要使用集成测试。但是,Burt建议将其作为静态查找器方法,这对于代码组织来说是一个很好的方法。您还应该查看http://www.grails.org/1.2+Release+Notes中描述的命名查询,以获得一个很好的语法。