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.

¿Cómo simular un método de la clase Aspect?

He añadido una anotación personalizada en un método que se encuentra dentro de una clase controladora. He implementado una clase de Aspectos que considera la anotación personalizada como un punto de corte. Una vez que la ejecución llega a la anotación personalizada, llama al método de intercepción que se encuentra dentro de la clase. Este método de intercepción contiene una lógica que llama a la base de datos para salvar los datos.

Al escribir casos de prueba para la clase controladora, ¿cómo puedo simular el método de intercepción mencionado anteriormente para que pueda resistir la llamada a la base de datos?

Nota: dentro del método de intercepción, estoy llamando a un método de otra clase que es la implementación de HandlerInterceptor.

@Aspect
class MuestraAspecto {
  @Around("execution(@Xyz)")
  public Object interceptor(ProceedingJoinPoint jointPoint) {
    // lógica de la base de datos
  }
}
@RestController 
class ControladorMuestra {
  @GetMapping("/{id}")
  @Xyz
  public String obtenerDatos(String id) {
    return "Hola";
  }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para simular el método interceptor y evitar la llamada a la base de datos al escribir casos de prueba para la clase controlador, puede utilizar Mockito para simular la implementación de la clase HandlerInterceptor que el método interceptor está llamando.

    En primer lugar, en su clase de prueba, importe los paquetes necesarios y cree un objeto simulado de la clase HandlerInterceptor:

    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.MockitoAnnotations;
    
    class SampleControllerTest {
      @Mock
      private HandlerInterceptorImpl handlerInterceptor;
    
      @InjectMocks
      private SampleController sampleController;
    
      ...
    }
    

    A continuación, en el método de configuración de la clase de prueba, inicialice los objetos simulados utilizando MockitoAnnotations:

    @BeforeEach
    void setUp() {
      MockitoAnnotations.initMocks(this);
    }
    

    Luego, en el método de prueba real, cuando llame al método del controlador con la anotación Xyz, puede utilizar Mockito para verificar que el método interceptor se llama con los parámetros correctos:

    @Test
    void testGetDataWithXyzAnnotation() {
      // Organizar
      String id = "testId";
    
      // Actuar
      sampleController.getdata(id);
    
      // Afirmar
      verify(handlerInterceptor).interceptMethod(any()); // Verificar que se llama al método interceptor con cualquier parámetro
    }
    

    Al utilizar el marco de trabajo Mockito, puede simular el comportamiento del método interceptor y asegurarse de que no llama realmente a la base de datos, al tiempo que le permite probar la funcionalidad de la clase controlador.

Comments are closed.