2011-06-29 10 views
5

एक स्प्रिंगएमवीसी के लिए, मेरे पास एक सरल विधि के साथ एक सरलफॉर्म नियंत्रक है जो लोकेल (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" बाहर प्रिंट करता है। क्या कोई इस के लिए बेहतर जुनीट टेस्ट रणनीति प्रदान कर सकता है?

उत्तर

2

आप अपने परीक्षण पर फिर से localeResolver प्राप्त की जरूरत है

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))); 
संबंधित मुद्दे