java.util.MissingResourceException:找不到基本名称javax.servlet.LocalStrings的bundle,locale es_ES

我试图在我的一个servlet中执行一些jUnit测试,但每当我尝试运行它时,我都会获得ExceptionInInitializerError。 我已经读过这个错误是由于在评估静态初始化程序或静态变量的初始化程序期间发生的exception。 问题是即使我试图修复它我也可以。 这就是我在这里写的原因:我的servlet代码如下:

public class AppServlet extends HttpServlet { //  /** * Handles the HTTP GET method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //obtenemos los valores de los campos del formulario. String usr = request.getParameter("usrName"); String cp = request.getParameter("codigoPostal"); Gson gson = new Gson(); if (usr == null || cp == null || cp.length() != 5) { Result r = new Result("KO", "No se introdujeron bien los datos"); String jsonString = gson.toJson(r); out.println(jsonString); return; } //procedemos a convertir el codigo postal en la ciudad usando geonames: //para ello usaremos la api de geonames String city = geoLocalize.localizeCity(cp); //empezaremos con el codigo de depuración para ver donde podemos tener errores if (city == null) { Result r = new Result("KO", "No hay ciudad para dicho codigo postal"); String jsonString = gson.toJson(r); out.println(jsonString); return; } //comenzamos con las bases de datos SQLconnection db = new SQLconnection(); //una vez creada la conexion deberemos hacer las insert en las tablas. if (!db.checkUsr(usr)) { if (db.insertUsr(usr)) { int numCp = parseInt(cp); if (!db.checkCP(numCp)) { if (db.addCity(numCp, city)) { Result r = new Result("OK", "Proceso terminado sin problemas"); String jsonString = gson.toJson(r); out.println(jsonString); return; } else { Result r = new Result("KO", "No se ha podido añadir la ciudad"); String jsonString = gson.toJson(r); out.println(jsonString); return; } } else { Result r = new Result("OK", "Se ha añadido el usuario, el codigo postal ya estaba"); String jsonString = gson.toJson(r); out.println(jsonString); return; } } else { Result r = new Result("KO", "No se ha podido añadir el usuario"); String jsonString = gson.toJson(r); out.println(jsonString); return; } } else { Result r = new Result("KO", "El usuario ya existe en el sistema"); String jsonString = gson.toJson(r); out.println(jsonString); return; } } catch (IOException | NumberFormatException ex) { Logger.getLogger(AppServlet.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { Logger.getLogger(AppServlet.class.getName()).log(Level.SEVERE, null, ex); } } 

}

我的jUnit测试代码如下:

 public class AppServletTest extends TestCase { HttpServletRequest request; HttpServletResponse response; AppServlet instance; public AppServletTest(String testName) { super(testName); } @Override protected void setUp() throws Exception { request = mock(HttpServletRequest.class); response = mock(HttpServletResponse.class); instance = new AppServlet(); super.setUp(); } @Override protected void tearDown() throws Exception { super.tearDown(); } /** * Test of doGet method, of class AppServlet. * * @throws java.lang.Exception */ public void testDoGet() throws Exception { System.out.println("doGet"); //generamos los parametros y un .txt donde guardaremos la respuesta JSON when(request.getParameter("usrName")).thenReturn("Javi"); when(request.getParameter("codigoPostal")).thenReturn("48991"); PrintWriter writer = new PrintWriter("resultadoPruebas.txt"); when(response.getWriter()).thenReturn(writer); //mandamos la peticion al servlet instance.doGet(request, response); verify(request, atLeast(1)).getParameter("usrName"); // para verificar si se ha llamado a usrName writer.flush(); // it may not have been flushed yet... assertTrue(FileUtils.fileRead(new File("somefile.txt"), "UTF-8") .contains("OK")); } 

}

这是完整的堆栈跟踪:

 java.lang.ExceptionInInitializerError at com.jbo.testapp.AppServletTest.setUp(AppServletTest.java:36) at junit.framework.TestCase.runBare(TestCase.java:128) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:96) at org.apache.maven.surefire.junit.JUnit3Provider.executeTestSet(JUnit3Provider.java:117) at org.apache.maven.surefire.junit.JUnit3Provider.invoke(JUnit3Provider.java:94) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) at javax.servlet.GenericServlet.(GenericServlet.java:95) ... 24 more Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) at javax.servlet.GenericServlet.(GenericServlet.java:95) ... 24 more 

希望你们能帮助我! 先感谢您

引起:java.util.MissingResourceException:找不到基本名称javax.servlet.LocalStrings的bundle,locale es_ES

那是真正的错误。

您的运行测试缺少servlet-api依赖项。

如果你正在使用maven,请确保这个依赖项在你的项目中:

  javax.servlet javax.servlet-api 3.1.0