代码之家  ›  专栏  ›  技术社区  ›  InverseFalcon

在SpringWebFlow单元测试中设置messages.properties

  •  2
  • InverseFalcon  · 技术社区  · 15 年前

    我正在使用SpringWebFlow2.0.7,刚刚开始设置单元测试。我已经得到了我的flows目录,其中包含了流xml文件和类路径上的messages.properties文件。

    它加载得很好,但似乎没有自动为流提取messages.properties文件,因此我的验证单元测试失败,因为它无法解析给定代码的消息。

    以下是例外情况的相关部分:

    org.springframework.context.NoSuchMessageException: No message found under code 'error_alnum_char_count_not_atleast' for locale 'en_US'.
    

    使用messages.properties中解析的代码生成错误消息似乎是一种相当常见的场景。那么…加载messages.properties文件的建议方法是什么?

    2 回复  |  直到 15 年前
        1
  •  0
  •   TrueDub    13 年前

    我知道这个问题有多老了,但找到解决办法后,我想我会把它贴给其他人:

    Object obj = builderContext.getApplicationContext()
                    .getBean(AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME);
            obj = builderContext.getApplicationContext().getBean(AbstractApplicationContext.MESSAGE_SOURCE_BEAN_NAME);
            if (obj != null && obj instanceof StaticMessageSource) {
                StaticMessageSource messageSource = (StaticMessageSource) obj;
                messageSource.setUseCodeAsDefaultMessage(true);
            }
    

        2
  •  0
  •   Dario Zamuner    9 年前

    我必须创造一个 ValidationContext 在自定义web流验证程序中使用。我用反射法解决了这个问题

    protected MessageSource validationMessages;
    
    /**
     * Creates a validationContext
     * We have to use reflection because there's no way to set
       the messageSource inside {@link MockRequestContext} otherwise
     *
     * @return {@link ValidationContext}
     * @throws IllegalAccessException
     * @throws NoSuchFieldException
     */
    protected ValidationContext getValidationContext() throws IllegalAccessException, NoSuchFieldException {
        final MockRequestContext requestContext = new MockRequestContext();
        requestContext.setExternalContext(context);
        final DefaultMessageContext defaultMessageContext = new DefaultMessageContext(validationMessages);
        final Field messageContextField = MockRequestContext.class.getDeclaredField("messageContext");
        final boolean accessible = messageContextField.isAccessible();
        messageContextField.setAccessible(true);
        messageContextField.set(requestContext, defaultMessageContext);
        messageContextField.setAccessible(accessible);
        return new DefaultValidationContext(requestContext, "validateInfo", mock(MappingResults.class));
    }