2010-05-05 70 views
7

在單元/功能測試中,應該測試多少GORM功能是否存在「最佳實踐」或事實標準?要測試多少Grails GORM?

我認爲應該做大部分域測試作爲功能測試,以便獲得完整的grails環境。但是你測試了什麼?插入,更新,刪除?您是否測試了約束,即使它們可能通過grails發佈進行了更徹底的測試?

或者你是否假設GORM做了它應該做的事情並轉移到應用程序的其他部分?

回答

5

我的一般規則是測試我寫的東西。因此,如果我編寫自定義方法(或閉包),那麼我將單元測試這些方法。這個規則也意味着我會測試約束,因爲我已經寫了約束。爲此,我在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"] 
} 

這將捉對我的約束拼寫錯誤的時候了。

我不測試保存,創建,更新,刪除在域;如果這些失敗了,那我就有更大的問題!

+0

你會不會測試關係1-M等? – 2010-05-06 00:38:00

+0

我不能說我已經在單元上直接測試過它們。我通常在集成層面上選擇它們。 – zentuit 2010-05-06 02:29:35

1

就我個人而言,我會測試任何複雜的關係,我並不是100%適合設置,並且任何訪問器的默認實現被覆蓋。

+0

這聽起來很合理,我只是擔心我正在測試GORM本身而不是我的代碼。從某種角度來看,我的映射是我的代碼的一部分,我正在測試它。 – 2010-05-05 20:26:06