SpringRunner frente a SpringBootTest

2 minutos de lectura

avatar de usuario
zuari

En la prueba unitaria, ¿cuáles son las diferencias entre @Runwith(SpringRunner.class) & @SpringBootTest?

¿Me puedes explicar los casos de uso de cada uno?

  • ¿Ha leído alguno de los diversos documentos? ¿Qué aún no está claro?

    – jonrsharpe

    17 de noviembre de 2019 a las 14:13

  • La diferencia obvia es Spring test vs Spring boot test, pero es una pregunta muy amplia

    – usuario7294900

    17 de noviembre de 2019 a las 14:20

  • Comprendería cuándo debo usar @SpringBootTest además de SpringRunner.

    – zuari

    17 de noviembre de 2019 a las 14:46

  • RunWith ya no es necesario a partir de JUnit 5 y puede eliminarse del código de prueba de su unidad.

    – Tony B.

    22 de julio de 2021 a las 15:05


@RunWith(SpringRunner.clase) : Necesita esta anotación solo para habilitar funciones de arranque de primavera como @Autowire, @MockBean etc.. durante las pruebas junit

se utiliza para proporcionar un puente entre las características de prueba de Spring Boot y JUnit. Siempre que estemos usando cualquier característica de prueba de Spring Boot en nuestras pruebas JUnit, se requerirá esta anotación.

@SpringBootTest: Esta anotación se utiliza para cargar el contexto completo de la aplicación para las pruebas de integración de extremo a extremo.

La anotación @SpringBootTest se puede usar cuando necesitamos arrancar todo el contenedor. La anotación funciona creando el ApplicationContext que se utilizará en nuestras pruebas.

Aquí está el artículo con ejemplos claros en ambos escenarios. Baldung

@RunWith es una anotación antigua de JUnit 4 para usar corredores de prueba. Si está usando JUnit 5 (Júpiter), debe usar @ExtendWith para usar extensiones JUnit

Ver
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

“Si está utilizando JUnit 4, no olvide agregar también @RunWith(SpringRunner.class) a su prueba; de lo contrario, se ignorarán las anotaciones. Si está utilizando JUnit 5, no es necesario agregar el equivalente @ExtendWith( SpringExtension.class) como @SpringBootTest y las otras anotaciones de @…Test ya están anotadas con él.

  • Acabo de soltar la anotación RunWith cuando me convertí a JUnit 5. Parece que no hay necesidad de usar ExtendWith, ya que su cita de los documentos de Spring deja en claro.

    – Tony B.

    22 de julio de 2021 a las 15:03

De primavera.io :

@RunWith(SpringRunner.class) le dice a JUnit que se ejecute usando el soporte de prueba de Spring. SpringRunner es el nuevo nombre de SpringJUnit4ClassRunneres un poco más agradable a la vista.

@SpringBootTest está diciendo “bootstrap con el soporte de Spring Boot” (por ejemplo, cargar application.properties y dame toda la bondad de Spring Boot)

Entonces, si no necesita todo lo que carga Spring Boot para su prueba de integración, es posible que no necesite @SpringBootTest

¿Ha sido útil esta solución?