2009-06-09 2 views
2

Я использую Spring Web Flow 2.0.7 и только начал настраивать свои модульные тесты. У меня есть каталог потоков, содержащий файлы потока xml и файлы messages.properties в моем пути к классам.Настройка message.properties в тесте unit Spring Webflow

Это нормально, но, похоже, он автоматически не отображает файл 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?

+0

Вы говорите, что сообщения не могут быть разрешены в ваших модульных тестах или в самом веб-потоке? –

+0

В модульных тестах. – InverseFalcon

ответ

0

Я знаю, сколько лет этот вопрос, но, найдя решение, я думал, что я отправлю его для других:

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); 
     } 

Приведенный выше код, помещенный в ваш метод configureFlowBuilderContext, разрешит все сообщения к сам код. Это не правильно разрешает ваши сообщения, но предотвратит указанный вами сбой и позволит пройти тесты.

Если есть лучший способ, мне бы очень хотелось услышать об этом, так как это действительно только обходной путь.

0

Мне нужно было создать ValidationContext для использования внутри настраиваемых валидаторов веб-потока. Я решил использовать отражение

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)); 
} 
Смежные вопросы