testing - 如何在 Grails 2.0 服务中单元或集成测试使用注入(inject)的 messageSource for i18n

标签 testing grails service internationalization grails-2.0

我在 Grails 2.0 项目的一项服务中使用消息包来处理国际化文本。用例是通过邮件插件以异步方式发送的电子邮件主题,因此在 Controller 或 TagLib 中使用它真的没有意义(考虑到不访问服务中的文本或 View 的通常论点).这段代码在我运行的 Grails 应用程序中运行良好,但我不确定如何测试它。

我在我的 defineBeans 中尝试了一个 PluginAwareResourceBundleMessageSource,因为这是我正在运行的应用程序注入(inject)的内容,但它导致了空指针,因为它似乎需要围绕插件管理器进行一系列设置,这样我的测试环境是不给予(甚至整合)。

然后我尝试了 ReloadableResourceBundleMessageSource,因为它是纯 Spring,但它似乎看不到我的 .properties 文件,并且失败并在代码 'my.email.subject' 下显示 No message found对于语言环境“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")

关于testing - 如何在 Grails 2.0 服务中单元或集成测试使用注入(inject)的 messageSource for i18n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134520/

相关文章:

grails - GSP 页面中的递归

validation - grails 2.3.3 命令验证错误消息

android - 棉花糖安卓中永无止境的后台服务

Android 共享首选项更改监听器即使使用监听器的全局引用也无法正常工作

testing - DoThrow MailException 与 mockito

ruby - 在 rspec 测试中实现前置/后置条件的更好方法

python - 如何测试是否已导入一个 python 模块?

grails - 种子种子插件的种子文件中如何循环播放?

testing - TeSTLink 1.9.4 与 bugzilla 4.2.3 集成

c# - ServiceProcess.ServiceController 是如何工作的?