Для SpringMVC у меня есть SimpleFormController с простым методом, который меняет язык для пользователя путем изменения локали (i18n).
//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());
}
}
И код отлично работает при использовании приложения . Однако я хочу сделать тест Junit для этого метода, и вот что я придумал:
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());
}
}
но он печатает "fr_CA", а не "zh_CN". Может ли кто-нибудь предложить для этого лучшую стратегию тестирования Junit?