2012-10-23 9 views
7

Ich versuche einen Komponententest über eine namedquery-Methode zu machen und es funktioniert nicht, da ich die Methode grails.orm.HibernateCriteriaBuilder.createAlias ​​verwende, die nicht scheint von Grails gefunden werden: "Keine Signatur der Methode: grails.gorm.CriteriaBuilder.createAlias ​​()"Grails Unit Test "CreateAlias" funktioniert nicht

Ich schätze das Problem ist, dass wenn man einen Unit-Test macht und die Klasse verspottet, es versucht, die Methode herum zu finden "grails.gorm.CriteriaBuilder" Klasse und nicht grails.orm.HibernateCriteriaBuilder Klasse, warum ?? irgendwelche Ideen, um es zu lösen?

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



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

Fehler: Keine Signatur der Methode: grails.gorm.CriteriaBuilder.createAlias ​​()

Antwort

2

Wir nicht diese Zahl könnte entweder; wir vermuten, dass es nur in der GORM UnitTest-Implementierung fehlt. Aber wenn Sie nur eine Assoziation abfragen wollen, brauchen Sie in Grails keinen Alias. Beachten Sie:

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

Eigentlich benötigen Sie manchmal einen Alias ​​- es ist die einzige Möglichkeit, einen linken Join anzugeben. Also '' 'Book.withCriteria {createAlias ​​('author', 'a', JoinType.LEFT_OUTER_JOIN) oder {isNull ('a.name') eq ('a.name', 'Fred')}}' 'würde Es ist ziemlich nützlich, testen zu können, aber soweit ich weiß, ist es sowieso nicht überprüfbar - bitte zeig mir, dass ich falsch liege! –