测试 – Grails GORM要测试多少?

是否有“最佳实践”或事实标准,在单元/功能测试中应测试多少GORM功能

我的看法是,应该将大多数域测试作为功能测试,以便您获得完整的grails环境.但你测试什么?插入,更新,删除?您是否测试了约束,即使它们可能已经通过grails发布进行了更彻底的测试?

或者你只是假设GORM做了它应该做的事情并转移到应用程序的其他部分?

我的一般规则是测试我写的东西.因此,如果我编写自定义方法(或闭包),那么我将对它们进行单元测试.这个规则也意味着我会在编写约束之后测试约束.为此我在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"]
}

这将立即捕捉我的约束的任何拼写错误.

我不测试域中的保存,创建,删除;如果这些失败那么我就有更大的问题!

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...