Grails GORM 的测试需要覆盖多少?

7

在单元测试/功能测试中,关于测试GORM功能的最佳实践或事实标准是否存在?

我的看法是,应该将大部分领域测试作为功能测试进行,以便您获得完整的Grails环境。但是,您要测试什么?插入、更新、删除?即使这些约束可能已经被Grails发布更全面地测试过了,您是否也要测试它们?

还是您只是假设GORM能够完成其预期的工作并转向应用程序的其他部分?

2个回答

5

我的一般规则是测试我写的代码。因此,如果我编写自定义方法(或闭包),则会对其进行单元测试。这个规则也意味着我会测试约束,因为我已经编写了这些约束。为此,我使用GrailsUnitTestCase中的mockForConstraintsTests()方法。

一个约束块的示例:

static constraints = {
      location(blank:true, nullable:true)
      make(blank:false, nullable:false)
      name(blank:false, nullable:false)
      serviceTag(nullable:true)
      purchaseDate(blank:false, nullable:false)
      checkedDate(blank:false, nullable:false)
      warrantyExpirationDate(nullable:true)
      notes(blank:true, nullable:true)
    }

我将有以下约束单元测试:
void test_null_constraints_are_checked() {
      mockForConstraintsTests(Hardware)
      def hardware = new Hardware()
      assertFalse hardware.validate()

      assertEquals 4, hardware.errors.getFieldErrorCount()
      assertEquals "nullable", hardware.errors["name"]
      assertEquals "nullable", hardware.errors["checkedDate"]
      assertEquals "nullable", hardware.errors["purchaseDate"]
      assertEquals "nullable", hardware.errors["make"]
}

这将立即捕获到我约束条件中的任何拼写错误。

我不会在领域层面测试保存、创建、更新和删除;如果这些操作失败,那么我的问题更大!


你会测试1-M等关系吗? - Lloyd Meinholz
我不能说我直接在单元测试过它们。我通常是在集成层面上挑选它们。 - zentuit

1

就我个人而言,对于那些我不太确定如何设置的复杂关系以及默认实现被覆盖的任何访问器,我都会进行测试。


这听起来很合理,我只是担心我正在测试GORM本身而不是我的代码。从某种角度来看,我的映射是我的代码的一部分,我正在测试它们。 - Lloyd Meinholz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接