2013-08-05 78 views
4

我想成爲一名優秀的小程序員,併爲我的Grails 2.2.3應用程序設置單元測試。使用GORM注入的方法的單元測試顯然不是堅持模擬測試數據庫。舉一個例子,這裏是一個測試包括:Grails單元測試無法識別領域類上的.save()

@TestFor(TermService) 
@Mock(Term) 
class TermServiceTests { 
    void testTermCount() { 
     def t = new Term(code: "201310").save(validate: false, flush: true, failOnError: true) 
     println "Printing Term: " + t.toString() 

     assert 1 == Term.count() // FAILS 
     assert service.isMainTerm(t) // FAILS 
    } 
} 

我做了一個println在結束了打印Printing Term: null,這意味着該期限沒有保存並返回一個期限實例。第一個斷言是錯誤的Term.count()返回0.

有誰知道這可能是爲什麼?我有一個模擬Term和TermService(通過TestFor註釋,我相信),所以我不太確定爲什麼這不起作用。謝謝!

編輯:這是我的術語類。

class Term { 

    Integer id 
    String code 
    String description 
    Date startDate 
    Date endDate 

    static mapping = { 
     // Legacy database mapping 
    } 

    static constraints = { 
     id blank: false 
     code maxSize: 6 
     description maxSize: 30 
     startDate() 
     endDate() 
    } 
} 
+1

設置'validate:true'看看你是否缺乏任何約束 – Alidad

+0

'Term'是怎麼樣的? – dmahapatro

+0

@Alidad我確實缺乏一些約束,但我認爲設置'validate:false'意味着驗證不會在保存時觸發,因此我不必填寫所有字段。 @dmahapatro我將Term添加到原始帖子中。 – grantmcconnaughey

回答

8

貌似id發生器是assigned,因爲你所提到的有關使用舊的數據庫。 Plus id默認情況下在域類中不可綁定(地圖構造對於id不起作用)。所以,我認爲你必須最終使用像下面這樣:

def t = new Term(code: "201310") 
t.id = 1 
t.save(...)