2010-05-24 12 views
7

Chciałbym przetestować zamknięcie "withCriteria" i nie jestem pewien, jak to zrobić. Widzę, jak wyśmiewać wywołanie Krytyka, ale nie testować kodu w zamknięciu. Podczas uruchamiania testu, który wykonuje polecenie "withCriteria", otrzymuję wyjątek MissingMethodException, mimo że kod działa poprawnie w normalnym przepływie wykonywania. Jakieś pomysły? Dzięki! SteveGrails withCriteria testing

Odpowiedz

14

Nie pójdę tą drogą. Zamiast tego przenieszę zapytanie do klasy domeny jako metodę statycznej wyszukiwarki i przetestuję je bezpośrednio w teście integracji z danymi rzeczywistymi. Wtedy możesz łatwo kpić z metody pomocnika, gdy zostanie wywołana w kontrolerze lub teście serwisowym.

class YourDomainClass { 

... 
    static List<YourDomainClass> findFooBar() { 
     YourDomainClass.withCriteria { 
     ... 
     } 
    } 
} 

Następnie w badanej jednostki:

def results = [instance1, instance2, instance3] 
YourDomainClass.metaClass.static.findFooBar = { -> results } 

W ten sposób można sprawdzić, czy kwerenda działa przeciwko bazy danych w pamięci w teście integracyjnym ale łatwo wyśmiewać go w testach jednostkowych.

0

Obecnie nie ma sztucznej implementacji kryteriów Hibernate. Musisz użyć testów integracji. Jednak zalecenie Burta, by uczynić tę metodę statycznej wyszukiwarki, jest dobre dla organizacji kodu. Powinieneś także spojrzeć na nazwane zapytania, opisane pod numerem http://www.grails.org/1.2+Release+Notes, aby uzyskać ładną składnię do tego.

1

nawiązaniu do odpowiedzi Burta, sprawdź nazwanych zapytań, jak opisano tutaj:

http://blog.springsource.com/2010/05/24/more-grails-1-3-features/

Następnie można mock nieruchomość/dostęp metody w badaniach jednostkowych, jak opisana przez Burt.

+3

Wymienione zapytań są świetne, ale nie był w stanie je wyśmiewać w testach jednostkowych. Czy udało Ci się to osiągnąć, czy też trzymałeś się testów integracyjnych? – j4y

1

Ponieważ nikt nie wspomniał o opcji utworzenia DSL do uruchamiania innych DSL, oto pełne ujawnienie tej metody. Używam go dość często z bardzo dobrymi wynikami.

Groovy/Grails testing DSLs