Я использую пакет сообщений в одной из моих служб в проекте Grails 2.0 для интернационализированного текста. Вариант использования - это тема электронной почты, которая отправляется через почтовый плагин асинхронным способом, поэтому нет смысла иметь это в контроллере или TagLib (учитывая обычный аргумент о том, что вы не получаете доступ к вашему тексту или представлениям в службе). Этот код отлично работает в моем приложении Grails, но я не уверен, как его протестировать.Как использовать тестирование интеграции или интеграции с помощью инъецированного messageSource для i18n в службе Grails 2.0
Я попытался использовать PluginAwareResourceBundleMessageSource
в моем defineBeans, поскольку это то, что вводит мое запущенное приложение, но оно привело к нулевым указателям, поскольку, по-видимому, ему нужна куча настроек вокруг менеджеров плагинов и такая, что моя тестовая среда не дает (даже интеграцию) ,
Я тогда попробовал ReloadableResourceBundleMessageSource
, поскольку это была чистая Весна, но она не может показаться, что я вижу мои .properties файлы, и не удается с сообщением Нет, найденным под кодом 'my.email.subject' для locale 'en'.
Я чувствую, что немного спускаюсь по червоточине, так как доступ к Grails i18n в сервисе не документирован в документах grails, поэтому, если есть предпочтительный способ сделать это, дайте мне знать.
Обратите внимание, что мой файл .properties находится в стандартном grails-app/i18n
месте.
Испытание
@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);
}
Услуги:
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);
}
Ваша цель, чтобы убедиться, что вы подключены правильно с этим один тест? Или вы планируете писать один для каждого языка, который вы поддерживаете? Также является ли ваш тестовый тест модульным тестом или тестом интеграции? –
Идея была меньше, чтобы проверить весеннюю проводку, но больше для проверки на разных языках по мере их поддержки, а также для проверки правильности ключа в свойствах и тексте. Я упростил параметры с целью удобочитаемости, но проверял их правильность. – Peter