Grails withCriteria测试

时间:2010-05-24 17:46:33

标签: grails groovy

我想测试一个“withCriteria”关闭,我不知道该怎么做。我看到如何模拟withCriteria调用,但不测试闭包内的代码。当运行执行“withCriteria”的测试时,我不断收到MissingMethodException,即使代码在正常的执行流程下运行正常。有任何想法吗? 谢谢! 史蒂夫

4 个答案:

答案 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的选项,因此完全披露了这种方法。我经常使用它并获得非常好的结果。

Groovy/Grails testing DSLs

答案 3 :(得分:0)

目前没有针对Hibernate标准的模拟实现。您需要使用集成测试。但是,Burt建议将其作为静态查找器方法,这对于代码组织来说是一个很好的方法。您还应该查看http://www.grails.org/1.2+Release+Notes中描述的命名查询,以获得一个很好的语法。