Mam usług Grails, który wysyła e-maile za pomocą usługi 3rd partii wykonując połączenia http:W jaki sposób mogę przetestować usługę Grails korzystającą z konwertera?
class EmailService {
def sendEmail(values) {
def valueJson = values as JSON
... // does HTTP call to 3rd party service
}
}
Pisałem test jednostki przetestować tę usługę (bo test integracja obraca się hibernacji i cała struktura domeny, które nie muszę):
@TestFor(EmailService)
class EmailServiceTests {
void testEmailServiceWorks() {
def values = [test: 'test', test2: 'test2']
service.sendEmail(values)
}
}
jednak, kiedy wykonać test jednostki, nie jest on z tym wyjątkiem, gdy próbuje zrobić konwersję as JSON
:
org.apache.commons.lang.UnhandledException: org.codehaus.groovy.grails.web.converters.exceptions.ConverterException: Unconvertable Obiekt klasy: java.util.LinkedHashMap
I ponownie pisałam badanej jednostki po prostu wykonaj następujące czynności:
void testEmailServiceWorks() {
def value = [test: 'test', test2: 'test2']
def valueJson = value as JSON
}
I uzyskać ten sam wyjątek, gdy próbuje zrobić konwersję as JSON
.
Czy ktoś wie, dlaczego otrzymuję ten wyjątek i jak mogę to naprawić?
Jak to będzie działać w grails 1.3.7. Kiedy używam tego. Otrzymuję komunikat o błędzie wykonywania na nieoczekiwanym tokenie:. nowe grails.converters. "$ {c}" (delegat) – allthenutsandbolts
Świetna odpowiedź - ustaw mnie we właściwym kierunku. Podana składnia dla asType nie działała, ale 'c.newInstance (delegate)' zrobił dla mnie. – Armand
To nie działa, poprawnym rozwiązaniem jest dodanie adnotacji '@TestMixin (ControllerUnitTestMixin)' (sprawdź odpowiedź @ Stephena poniżej). – mathifonseca