代码之家  ›  专栏  ›  技术社区  ›  Steve Wall

带标准测试的颗粒

  •  7
  • Steve Wall  · 技术社区  · 14 年前

    我想测试一个“withcriteria”闭包,不知道该怎么做。我看到了如何模拟withCriteria调用,但没有在闭包内测试代码。当运行执行“withCriteria”的测试时,我会一直得到MissingMethodException,即使代码在正常的执行流下运行良好。有什么想法吗? 谢谢! 史蒂夫

    4 回复  |  直到 14 年前
        1
  •  14
  •   Burt Beckwith    14 年前

    我不会走那条路。相反,我将把查询作为一个静态的finder方法移动到域类中,并在带有实际数据的集成测试中直接测试它。然后,当在控制器或服务测试中调用helper方法时,您可以轻松地模拟它。

    class YourDomainClass {
    
    ...
       static List<YourDomainClass> findFooBar() {
          YourDomainClass.withCriteria {
             ...
          }
       }
    }
    

    然后在单元测试中:

    def results = [instance1, instance2, instance3]
    YourDomainClass.metaClass.static.findFooBar = { -> results }
    

    通过这种方式,您可以在集成测试中测试查询是否适用于内存中的数据库,但在单元测试中很容易对其进行模拟。

        2
  •  1
  •   Peter Ledbrook    14 年前

    关于Burt的答案,请查看以下所述的命名查询:

    http://blog.springsource.com/2010/05/24/more-grails-1-3-features/

    然后,您可以在单元测试中模拟Burt所描述的属性/方法访问。

        3
  •  1
  •   Matthias Hryniszak    14 年前

    由于没有人提到创建一个DSL来运行其他DSL的选项,这里完全公开了这个方法。我经常使用它,效果很好。

    Groovy/Grails testing DSLs

        4
  •  0
  •   John Stoneham    14 年前

    目前还没有针对休眠条件的模拟实现。您需要使用集成测试。但是,Burt建议将此方法设置为静态finder方法,这对于代码组织来说是一个很好的方法。您还应该查看命名查询,如 http://www.grails.org/1.2+Release+Notes ,这是一个很好的语法。