2011-06-29 21 views
5

Para SpringMVC, tengo un SimpleFormController con un método simple que cambia el idioma del usuario al cambiar la configuración regional (i18n).Java junit test change Configuración regional en Spring SimpleFormController

//localization 
public void localize(HttpServletRequest request, HttpServletResponse response, String language) throws Exception { 
    LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);     

    if (localeResolver != null) { 
     LocaleEditor localeEditor = new LocaleEditor(); 
     localeEditor.setAsText(language); 

     // set the new locale 
     localeResolver.setLocale(request, response, 
       (Locale) localeEditor.getValue()); 
    } 
} 

Y el código funciona bien durante el uso de la aplicación. Sin embargo, quiero hacer la prueba Junit para este procedimiento y la siguiente es lo que he encontrado hasta el momento:

public class LoginPostControllerTest extends TestCase { 
public void testLocalize() throws Exception { 

    MockHttpServletRequest mockRequest = new MockHttpServletRequest(); 
    MockHttpServletResponse mockResponse = new MockHttpServletResponse(); 

    Locale frenchLocale = Locale.CANADA_FRENCH; 

    mockRequest.addPreferredLocale(frenchLocale); 

    SessionLocaleResolver localeResolver = new SessionLocaleResolver(); 

    mockRequest.setAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE, localeResolver); 

    String language = "zh_CN"; 

    LoginPostController loginPostControllerTest = new LoginPostController(); 

    loginPostControllerTest.localize(mockRequest, mockResponse, language); 
    System.out.println(mockRequest.getLocale().toString()); 
} 

}

pero se imprime a cabo "fr_CA" no "zh_CN". ¿Alguien puede proporcionar una mejor estrategia de prueba de Junit para esto?

Respuesta

2

necesita obtener de nuevo la localeResolver en su prueba

LocaleResolver resolver = RequestContextUtils.getLocaleResolver(mockRequest); 
System.out.println(mockRequest.getLocale().toString()); 
System.out.println(resolver.resolveLocale(mockRequest).toString()); 
assertTrue(!mockRequest.getLocale().equals(resolver.resolveLocale(mockRequest))); 
Cuestiones relacionadas