在單元/功能測試中,應該測試多少GORM功能是否存在「最佳實踐」或事實標準?要測試多少Grails GORM?
我認爲應該做大部分域測試作爲功能測試,以便獲得完整的grails環境。但是你測試了什麼?插入,更新,刪除?您是否測試了約束,即使它們可能通過grails發佈進行了更徹底的測試?
或者你是否假設GORM做了它應該做的事情並轉移到應用程序的其他部分?
在單元/功能測試中,應該測試多少GORM功能是否存在「最佳實踐」或事實標準?要測試多少Grails GORM?
我認爲應該做大部分域測試作爲功能測試,以便獲得完整的grails環境。但是你測試了什麼?插入,更新,刪除?您是否測試了約束,即使它們可能通過grails發佈進行了更徹底的測試?
或者你是否假設GORM做了它應該做的事情並轉移到應用程序的其他部分?
我的一般規則是測試我寫的東西。因此,如果我編寫自定義方法(或閉包),那麼我將單元測試這些方法。這個規則也意味着我會測試約束,因爲我已經寫了約束。爲此,我在GrailsUnitTestCase中使用mockForConstraintsTests()方法。
一個例子constraints塊:
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"]
}
這將捉對我的約束拼寫錯誤的時候了。
我不測試保存,創建,更新,刪除在域;如果這些失敗了,那我就有更大的問題!
就我個人而言,我會測試任何複雜的關係,我並不是100%適合設置,並且任何訪問器的默認實現被覆蓋。
這聽起來很合理,我只是擔心我正在測試GORM本身而不是我的代碼。從某種角度來看,我的映射是我的代碼的一部分,我正在測試它。 – 2010-05-05 20:26:06
你會不會測試關係1-M等? – 2010-05-06 00:38:00
我不能說我已經在單元上直接測試過它們。我通常在集成層面上選擇它們。 – zentuit 2010-05-06 02:29:35