unit-testing - example - java.lang.illegalstateexception: failed to load applicationcontext
Proyecto Java: Error al cargar ApplicationContext (3)
Tengo un proyecto Java en el que estoy escribiendo un caso de prueba JUNIT simple. He copiado el archivo applyatinoContext.xml en el directorio de origen de Java raíz. Lo he intentado con algunas de las configuraciones recomendadas que he leído aquí en StackOverflow pero sigo recibiendo el mismo error. ¿Ocurre este error debido a que mi proyecto es un proyecto java y NO un proyecto web, o eso incluso importa? No estoy seguro de dónde voy mal.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"C:/projs/sortation/src/main/java/applicationContext.xml"})
// Also tried these settings but they also didnt work,
//@ContextConfiguration(locations={"classpath:applicationContext.xml"})
//@ContextConfiguration("classpath:applicationContext.xml")
@Transactional
public class TestSS {
@Autowired
private EmsDao dao;
@Test
public void getSites() {
List<String> batchid = dao.getList();
for (String s : batchid) {
System.out.println(s);
}
}
}
He enfrentado este problema porque during bootstrapping my spring project
usando la clase que implementa ApplicationListener<ContextRefreshedEvent>
y dentro de la función onApplicationEvent
, onApplicationEvent
una excepción.
así que asegúrese de que los puntos de arranque de su aplicación no produzcan ninguna excepción
En mi caso, estaba usando el complemento Maven surefire para probar, así que para depurar el proceso de prueba, use este comando
mvn -Dmaven.surefire.debug test
Parece que estás utilizando maven ( src/main/java)
. En este caso, coloque el archivo applicationContext.xml
en el directorio src/main/resources
. Se copiará en el directorio classpath y debería poder acceder a él con
@ContextConfiguration("/applicationContext.xml")
Desde la Spring-Documentation : una ruta simple, por ejemplo, "context.xml", se tratará como un recurso classpath del mismo paquete en el que se define la clase de prueba . Una ruta que comienza con una barra inclinada se trata como una ubicación de ruta de clase completamente calificada , por ejemplo, "/org/example/config.xml".
Por lo tanto, es importante que agregue la barra diagonal cuando haga referencia al archivo en el directorio raíz de la ruta de clase.
Si trabajas con la ruta de acceso absoluta del archivo, debes usar ''file: C: ...'' (si entiendo la documentación correctamente).
Tuve el mismo problema y estaba usando el siguiente complemento para las pruebas:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<useFile>true</useFile>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
<junitArtifactName>junit:junit</junitArtifactName>
<parallel>methods</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
La prueba se estaba ejecutando bien en el IDE (eclipse sts), pero falló al usar el comando mvn test .
Después de muchas pruebas y errores, pensé que la solución era eliminar las pruebas paralelas, las siguientes dos líneas de la configuración del complemento anterior:
<parallel>methods</parallel>
<threadCount>10</threadCount>
Espero que esto ayude a alguien!