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.

Reemplace un bean por un mock en la prueba de Helidon.

Tengo una aplicación Helidon y me gustaría probarla (parte de ella).

Mi prueba está anotada con @HelidonTest, y ahora me gustaría reemplazar un bean por un mock (y configurar este mock, usar todos los demás beans tal como se encuentran, pero con el mock inyectado).

He descubierto cómo hacer lo siguiente:

  • Reemplazar un bean por una implementación de prueba (clase separada): Anotando la clase de implementación de prueba con @Priority(1) y @Alternative y proporcionándola mediante la anotación del test con @AddBean(MyBeanTestImpl.class).
    • Pero no puedo crear un mock (con Mockito) como una clase individual.
  • Producir un mock(MyBean.class): Creando un método productor y anotándolo con @Produces:
    • Pero entra en conflicto con el bean real y da como resultado: “WELD-001409: Ambiguous dependencies for type…”
    • Cuando lo anoto también con @Alternative, simplemente se ignora.
    • No puedo anotarlo con @Priority(1), porque esta anotación solo se puede aplicar a tipos y parámetros.

¿Algún idea de cómo puedo reemplazar un bean por un mock?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede utilizar el framework Mockito para crear un objeto falso (mock) del bean que desees reemplazar. Aquí están los pasos que puedes seguir:

    1. Crea un objeto falso (mock) de Mockito del bean:
    MyBean mockBean = mock(MyBean.class);
    
    1. Crea un método productor que devuelva el objeto falso (mock):
    @Produces
    public MyBean myBeanProducer() {
        return mockBean;
    }
    
    1. Añade el método productor a tu clase de prueba:
    @HelidonTest
    public class MyTest {
    
        @Produces
        public MyBean myBeanProducer() {
            return mockBean;
        }
    
        ...
    }
    
    1. Reemplaza el bean original con el objeto falso (mock) en tu método de prueba utilizando el método when de Mockito:
    @Test
    public void myTest() {
        when(myBean.algunMetodo()).thenReturn("valorFalso");
    
        // Código de prueba
    }
    

    Esto reemplazará el bean original con el objeto falso (mock) en tu método de prueba, permitiéndote probar tu código con la implementación falsa (mock) del bean.

Comments are closed.