使用 SpringMVC 5.0 + JUnit 4.12 + MyEclipse 進行 MockMvc 單元測試時,控制台噴出:
Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CN
雖不影響測試執行,但干擾日誌閱讀,且提示缺少 Servlet 運行環境資源。
MockMvc 在獨立測試環境下模擬 Servlet 容器,但 classpath 缺少 javax.servlet.jsp.jstl 或 tomcat-embed-jasper 等提供 LocalStrings.properties 的 JAR。中文環境下嘗試載入 zh_CN 語言包失敗。
在 pom.xml test scope 添加:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.70</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
File → Project Structure → Modules → Dependencies+ → JARs or directories 選擇 Tomcat lib 目錄下的 jsp-api.jar、jasper.jarRun/Debug Configurations 的 Use classpath of module 選擇 Web 模塊LocalStrings.properties 位於 jasper.jar 或 tomcat-embed-jasper.jar 的 javax/servlet/ 目錄DispatcherServlet,JSP 引擎嘗試載入語言包ResourceBundle.getBundle("javax.servlet.LocalStrings") 能正確找到 zh_CN 變體@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("classpath:spring-mvc-test.xml")
public class ControllerTest {
@Autowired WebApplicationContext wac;
MockMvc mockMvc;
@Before public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test public void testHome() throws Exception {
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index"));
}
}
補全 Servlet 運行時依賴,MockMvc 測試環境即可完美支援中文語系。