2012-10-23 9 views
7

Próbuję wykonać test jednostkowy nad metodą nazwanej kwerendy i to nie działa, ponieważ używam metody grails.orm.HibernateCriteriaBuilder.createAlias, która nie wydaje się być zostać znaleziony przez Grails: "Brak sygnatury metody: grails.gorm.CriteriaBuilder.createAlias ​​()"Test jednostki Grails "CreateAlias" nie działa

Domyślam się, że problem polega na tym, że podczas testowania jednostki i kpienia z klasy, próbuje ona znaleźć metodę "grails.gorm.CriteriaBuilder" klasa, a nie grails.orm.HibernateCriteriaBuilder klasa, dlaczego? jakieś pomysły na rozwiązanie?

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



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

Błąd: Brak podpis metody: grails.gorm.CriteriaBuilder.createAlias ​​()

Odpowiedz

2

Nie mogliśmy rysunek to albo; podejrzewamy, że po prostu brakuje jej w implementacji GORM UnitTest. Ale jeśli chcesz tylko zapytać o powiązanie, w Grails nie potrzebujesz aliasu. Obserwuj:

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

Właściwie czasami potrzebujesz aliasu - jest to jedyny sposób określenia lewego sprzężenia. Tak więc '' Book.withCriteria {createAlias ​​("autor", "a", JoinType.LEFT_OUTER_JOIN) lub {isNull ("a.name") eq ("a.name", "Fred")}} być całkiem przydatnym do testowania, ale o ile wiem, w żaden sposób nie da się tego przetestować - proszę mi pokazać, że jestem w błędzie! –