【问题标题】:How much of Grails GORM to test?要测试多少 Grails GORM?
【发布时间】:2010-05-05 04:25:28
【问题描述】:

是否存在“最佳实践”或事实上的标准,说明应该在单元/功能测试中测试多少 GORM 功能?

我的看法是,应该将大部分领域测试作为功能测试进行,这样您就可以获得完整的 grails 环境。但是你测试什么?插入、更新、删除?尽管 grails 版本可能对约束进行了更彻底的测试,但您会测试它们吗?

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

【问题讨论】:

    标签: testing grails tdd grails-orm


    【解决方案1】:

    我的一般规则是测试我写的东西。因此,如果我编写自定义方法(或闭包),那么我将对它们进行单元测试。这条规则也意味着我将测试约束,因为我已经编写了约束。为此,我在 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 等关系吗?
    • 我不能说我已经在单位直接测试过它们。我通常在集成级别选择它们。
    【解决方案2】:

    我个人会测试任何我不能 100% 适应设置的复杂关系,以及默认实现被覆盖的任何访问器。

    【讨论】:

    • 这听起来很合理,我只是担心我正在测试 GORM 本身而不是我的代码。从某种角度来看,我的映射是我的代码的一部分,我正在测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多