2012-10-23 144 views
7

我想對namedquery方法進行單元測試,它不工作,因爲我使用的方法grails.orm.HibernateCriteriaBuilder.createAlias似乎並不被Grails發現:「沒有方法簽名:grails.gorm.CriteriaBuilder.createAlias()」Grails單元測試「CreateAlias」不起作用

我想問題是,當進行單元測試和嘲笑類時,它試圖找到方法「grails.gorm.CriteriaBuilder」類而不是grails.orm.HibernateCriteriaBuilder類,爲什麼?任何想法來解決它?

class Book{ 
    static namedQueries = {  
     testMethod() 
     { 
     createAlias('name', 'james') 
     } 
    } 
} 



@Mock([Book]) 
class BookTests{ 
    @Test 
    void myTest() { 
     Book.testMethod(); 
    } 
} 

錯誤:法無簽名:grails.gorm.CriteriaBuilder.createAlias()

回答

2

我們無法想出解決辦法要麼;我們懷疑它只是從GORM UnitTest實現中丟失了。但是如果你只想查詢一個關聯,在Grails中你不需要別名。觀察:

Book.createCriteria { 
    eq("title", "One Hundred Years of Solitude") 
    author { 
     eq("name", "Gabriel García Márquez") 
    } 
} 
+0

實際上,有時您確實需要別名 - 這是指定左連接的唯一方法。因此'''Book.withCriteria {createAlias('author','a',JoinType.LEFT_OUTER_JOIN)或{isNull('a.name')eq('a.name','Fred')}}'''會對於能夠測試是相當有用的,但據我所知,無論如何它都無法測試 - 有人請告訴我我錯了! –