2013-05-02 14 views
26

Rozglądałem się i próbowałem różnych rzeczy bez skutku. Przykłady w interwebs są nieliczne, a IMHO całkiem proste. Mój przypadek użycia:Czy jest jakiś sposób na robienie argumentów w Spocku?

(tzw itocNetworkHandler "poniżej jest fałszywa)

when: "we're doing stuff" 
    StandardResponse response = cms.doCardStuff("123", "111", order) 
.... 
then: "we get proper calls and response object" 
    1 * cms.itocNetworkHandler.doNetworkCall(
      { it instanceof ReplacementRequestRecord 
      }, StandardResponseRecord.class) >> record 

chciałbym przechowywać z dala parametr („IT”) do„doNetworkCall”na makiety.

Powodem, dla którego chcę, aby parametr był, ponieważ obiekt, który testuję, powinien przyjmować moje parametry, robić rzeczy, tworzyć nowy obiekt i przekazywać go do mojego projektu. Chcę się upewnić, że utworzony obiekt wygląda tak, jak powinien.

Wskaźniki bardzo doceniane.

+0

Dlaczego chcesz zapisać argument? Co z tym zrobisz? –

+0

Wyjaśniłem powyżej, dlaczego potrzebuję go. – Mathias

Odpowiedz

35

Można uchwycić argument następująco:

// must be declared before when-block (or inside Specification.interaction {}) 
def captured 

when: 
... 

then: 
1 * mock.doNetworkCall(...) >> { record, recordClass -> 
    // save the argument 
    captured = record 
    ... 
} 
// use the saved argument 
captured == ... 

Powiedział, że często nie jest to prostsze rozwiązanie, takie jak sprawdzanie oczekiwany rekordowy w prawo przymusu argument (np ...doNetworkCall({ it == ... })).

+0

Dzięki, działa. Powodem, dla którego nie chcę tego w "it ==" itp. Jest to, że chcę dużo kontroli, i myślę, że jest dużo bardziej troskliwy, aby mieć wszystkie potwierdzenia w końcu, jeśli widzisz, co mam na myśli. – Mathias

+0

Możesz umieścić sprawdzenia w metodzie pomocnika i wywołać metodę pomocnika z ograniczenia argumentu. –

+1

Tak, to jest taka możliwość. Myślę jednak, że lubię je w końcu. Czuję się trochę "podstępny", aby zrobić twierdzenia w bloku parametrów, dla czytelności lubię je w końcu. A może po prostu nie jestem przyzwyczajony do żargonu? – Mathias

Powiązane problemy