Ich versuche, einen jUnit-Test in einem meiner Servlets durchzuführen, aber wenn ich versuche, es auszuführen, erhalte ich einen ExceptionInInitializerError. Ich habe gelesen, dass dieser Fehler auf eine Ausnahme zurückzuführen ist, die während der Evaluierung eines statischen Initialisierers oder des Initialisierers für eine statische Variable aufgetreten ist. Die Sache ist, dass, obwohl ich versuchte, es zu beheben, ich kann. Deshalb schreibe ich hier: mein Servlet-Code ist der folgende:java.util.MissingResourceException: Bündel für Basisname nicht gefunden javax.servlet.LocalStrings, locale es_ES
public class AppServlet extends HttpServlet {
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> 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);
}
}
}
Und meine JUnit-Testcode ist folgende:
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"));
}
}
Ein hier ist Der vollständige Stacktrace:
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.<clinit>(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.<clinit>(GenericServlet.java:95)
... 24 more
Hoffe ihr könnt mir helfen! Vielen Dank im Voraus
die volle stacktrace hinzufügen:
Wenn Sie Maven verwenden stellen Sie sicher, diese Abhängigkeit in Ihrem Projekt. – Jens
du gehst! hinzugefügt :) –