Solución:
Entonces aquí está la solución:
La documentación sobre la detección de la configuración de prueba dice:
El algoritmo de búsqueda funciona desde el paquete que contiene la prueba hasta que encuentra una clase anotada @SpringBootApplication o @SpringBootConfiguration. Siempre que haya estructurado su código de una manera sensata, generalmente se encuentra su configuración principal.
Entonces el @SpringBootApplication
la clase debe ser más alta en la jerarquía del paquete que la clase de prueba, por ejemplo, si la clase de prueba está en el paquete com.zerosolutions.controller
luego @SpringBootApplication
la clase debe estar en un paquete superior a com.zerosolutions.controller
paquete es decir com.zerosolutions
o com
.
Problema
Pero en caso de que el @SpringBootApplication
la clase está al mismo nivel que la clase de prueba, no podrá encontrarla, es decir com.zerosolutions.general
. En este caso, obtendrá el siguiente error:
java.lang.IllegalStateException: no se puede encontrar una @SpringBootConfiguration, debe usar @ContextConfiguration o @SpringBootTest (classes = …) con su prueba
Solución
Si está ejecutando una prueba integrada, puede mencionar explícitamente el @SpringBootApplication
clase como esta
@RunWith(SpringRunner.class)
@SpringBootTest(classes={SpringBootApp.class})
Pero si desea realizar pruebas unitarias de un controlador, no es necesario que inicie todo el contexto de Spring. Prefieres reemplazar @SpringBootTest
con @WebMvcTest(MasterController.class)
. Esto instanciará solo la capa web con MasterController
y no todo el contexto de Spring.
Problema
Pero el problema es que volverá a encontrarse con el error que enfrentamos anteriormente:
java.lang.IllegalStateException: No se puede encontrar una @SpringBootConfiguration, necesita usar @ContextConfiguration o @SpringBootTest (classes = …) con su prueba
Y @WebMvtTest
no tiene una classes
atributo como @SpringBootTest
para mencionar explícitamente el @SpringBootApplication
clase. Entonces, hay dos soluciones para esto.
Solución
Primero: Mueva su clase de aplicación a un paquete superior a la clase de prueba, es decir com.zerosolutions
o com
paquete.
Segundo: Mencione su @SpringBootApplication
clase explícitamente como a continuación
@RunWith(SpringRunner.class)
@WebMvcTest(MasterController.class)
@ContextConfiguration(classes={SpringBootApp.class})
Espero que se aclare la confusión de la configuración de la prueba de primavera. Gracias
Si su clase Application.java (en src / main / java) se encuentra en
com.A.B
Su clase de prueba ApplicationTest.java (en src / test / java) debe estar debajo
com.A.B
o com.A.B.C
o com.A.B.C.D
Obtendrá este error si la clase de prueba se encuentra en los siguientes paquetes
com.A
o com.A.C
o com.A.D
En Spring boot LA REGLA GENERAL ES EL NOMBRE DEL PAQUETE DE LA CLASE DE PRUEBA DEBE COMENZAR CON EL NOMBRE DEL PAQUETE DEL PAQUETE DE LA CLASE JAVA QUE SE VA A PROBAR