在单元测试/功能测试中,关于测试GORM功能的最佳实践或事实标准是否存在?
我的看法是,应该将大部分领域测试作为功能测试进行,以便您获得完整的Grails环境。但是,您要测试什么?插入、更新、删除?即使这些约束可能已经被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"]
}
这将立即捕获到我约束条件中的任何拼写错误。
我不会在领域层面测试保存、创建、更新和删除;如果这些操作失败,那么我的问题更大!
就我个人而言,对于那些我不太确定如何设置的复杂关系以及默认实现被覆盖的任何访问器,我都会进行测试。