Uso un bundle di messaggi in uno dei miei servizi in un progetto Grails 2.0 per testo internazionalizzato. Il caso d'uso è un oggetto di posta elettronica che viene inviato tramite il plug-in di posta in modo asincrono, quindi non ha senso avere questo in un controller o TagLib (dato il solito argomento di non accedere al testo o alle viste in un servizio). Questo codice funziona perfettamente con la mia app Grails in esecuzione, ma non sono sicuro di come testarlo.Come utilizzare l'unit test o l'integrazione di messageSource per i18n nel servizio Grails 2.0
Ho provato un PluginAwareResourceBundleMessageSource
nei miei defineBeans in quanto è ciò che la mia applicazione in esecuzione inietta, ma ha portato a nullpointers in quanto sembra abbia bisogno di un po 'di setup intorno ai gestori di plugin e in modo tale che il mio ambiente di test non dia (anche integrazione) .
Ho quindi provato un ReloadableResourceBundleMessageSource
come fosse puro Spring, ma non può sembrare di vedere i miei file .properties e non riesce con un messaggio No trovato sotto il codice 'my.email.subject' per le impostazioni locali 'en'.
Mi sento come se stessi scendendo un wormhole un po 'mentre accedere a Grails i18n in un servizio non è documentato nei documenti Grails, quindi se c'è un modo preferito per farlo, fammi sapere.
Nota Il file .properties si trova nella posizione standard grails-app/i18n
.
Il test
@TestFor(EmailHelperService)
class EmailHelperServiceTests {
void testSubjectsDefaultLocale() {
defineBeans {
//messageSource(PluginAwareResourceBundleMessageSource); Leads to nullpointers
messageSource(ReloadableResourceBundleMessageSource);
}
String expected = "My Expected subject Passed1 Passed2";
String actual = service.getEmailSubjectForStandardMustGiveGiftFromBusiness(Locale.ENGLISH, Passed1 Passed2);
assertEquals("email subject", expected, actual);
}
Servizio:
class EmailHelperService {
def messageSource;
public String getEmailSubject(Locale locale, String param1, String param2) {
Object[] params = [param1, param2].toArray();
return messageSource.getMessage("my.email.subject", params, locale);
}
È vostra intenzione di fare in modo che si sta cablato correttamente con questo test? O stai pianificando di scriverne uno per ogni lingua che supporti? Anche il test sopra riportato è un test unitario o un test di integrazione? –
l'idea era meno di controllare il cablaggio della molla, ma più per verificare le varie lingue man mano che vengono supportate, e per verificare la correttezza della chiave in .properties e il testo. Ho semplificato i parametri ai fini della leggibilità, ma ho verificato la loro correttezza desiderata. – Peter