es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo problemas al intentar probar la funcionalidad que contiene autowired SpringBoot con junit 5.

Quiero probar algunas funcionalidades, un servicio con un repositorio que se conecta automáticamente. No quiero falsificar el autowired, es más una prueba de integración para depurar.

Mi prueba es la siguiente:

@SpringBootConfiguration
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class ThrottleRateServiceTest {

El código es muy simple:

@Service
public class ThrottleRateServiceImpl implements ThrottleRateService {

El problema es que throttleRateRepository siempre es nulo.

He logrado probar este tipo de código antes, con JUnit 4 con

@RunWith(SpringJUnit4ClassRunner.class)

Lo cual conecta automáticamente todos los beans. Ha pasado un tiempo desde que hice este tipo de pruebas de integración, y todo ha cambiado con JUnit 5. Gracias por cualquier ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para probar una funcionalidad que involucre un servicio con un repositorio autowired, sin tener que simular el repositorio autowired, se puede utilizar JUnit 5 con Spring Boot.

    En su clase de prueba, anote con @SpringBootTest, @SpringBootConfiguration y @ExtendWith(SpringExtension.class) para habilitar la autoconfiguración de Spring Boot y el soporte de Spring para el framework de contexto de prueba.

    Para acceder al repositorio autowired, no debe instanciar manualmente ThrottleRateServiceImpl en el método setUp(), ya que Spring no gestionará las dependencias del objeto. En su lugar, puede autowire el ThrottleRateServiceImpl en su clase de prueba y permitir que Spring maneje la inyección de dependencias.

    Su clase de prueba deberá verse así:

    @SpringBootConfiguration
    @ExtendWith(SpringExtension.class)
    @SpringBootTest
    public class ThrottleRateServiceTest {
    
        @Autowired
        private ThrottleRateService service;
    
        @Test
        public void testThrottoling() {
            service.isAllowed("test");
        }
    }
    

    Al autowirear el servicio, Spring también autowireará la dependencia del ThrottleRateRepository. Ahora puede utilizar el service para probar el método isAllowed().

    ¡Espero que esto le sea de ayuda!

Comments are closed.