测试 – 如何在Grails 2.0服务中对i18n注入的messageSource进行单元或集成测试

我在Grails 2.0项目中的一个服务中使用了一个消息包,用于国际化文本.用例是通过邮件插件以异步方式发送的电子邮件主题,因此在控制器或TagLib中确实没有意义(给定通常的参数是不访问您的文本或服务中的视图) ).这个代码在我运行的Grails应用程序中工作正常,但我不知道如何测试它.

我在我的defineBeans中尝试了一个PluginAwareResourceBundleMessageSource,因为这是我运行的应用程序注入的,但它导致了nullpointers,因为它似乎需要一堆围绕插件管理器的设置,这样我的测试环境不会(甚至集成).

然后,我尝试了一个ReloadableResourceBundleMessageSource,因为它是纯粹的Spring,但似乎看不到我的.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 );      
    }
最佳答案
Grails中的单元测试中已经有一个messageSource,它是一个StaticMessageSource(参见http://static.springsource.org/spring/docs/2.5.4/api/org/springframework/context/support/StaticMessageSource.html),您可以使用addMessage方法添加模拟消息:

messageSource.addMessage("foo.bar", request.locale, "My Message")

转载注明原文:测试 – 如何在Grails 2.0服务中对i18n注入的messageSource进行单元或集成测试 - 代码日志