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.

Prueba de Java para verificar si se utiliza el objeto de clase correcto.

Tengo un método que lee datos de un archivo CSV, pero solo utiliza un objeto de clase específico:

class A {
    public void examine(Param[] params) {
        ZZZ zzz = new ZZZ();
        // otras cosas
    }
}

El escenario es que si alguien cambia manualmente el método, la prueba debería fallar (si no es un objeto ZZZ).
Soy nuevo en las pruebas… ¿cómo puedo escribir un caso de prueba que solo pase cuando la variable local utiliza un objeto de clase específico, en este caso, solo se acepta ZZZ?

Lo que estoy pensando es modificar el método agregando:

class A {
    public void examine(Param[] params) {
        ZZZ zzz = new ZZZ();
        if (zzz instanceof ZZZ == false) {
            throw new IllegalArgumentException("no es de tipo ZZZ");
        }
        // otras cosas
    }
}

¿pero cómo puedo capturar la excepción?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar que el método examine solo utiliza la clase ZZZ, puedes escribir una prueba unitaria utilizando Mockito para verificar que se crea una instancia de ZZZ dentro del método.

    Primero, necesitarás inyectar un objeto simulado (mock) de la clase A en tu caso de prueba. Esto se puede hacer utilizando la anotación @Mock del framework de Mockito.

    Luego, puedes utilizar el método Mockito.verify() para comprobar que el objeto simulado llama al constructor new ZZZ() al menos una vez. Esto se vería así:

    import static org.mockito.Mockito.*;
    
    @RunWith(MockitoJUnitRunner.class)
    public class ATest {
    
        @Mock
        A a;
    
        @Test
        public void testExamine() {
            // Llama al método
            a.examine(new Param[] {});
    
            // Verifica que se haya llamado a new ZZZ() al menos una vez
            verify(a, atLeastOnce()).new ZZZ();
        }
    }
    

    Si alguien cambia el método para crear una clase diferente, la prueba fallará ya que solo espera una instancia de ZZZ. La excepción IllegalArgumentException que agregaste al método no se lanzará ya que Mockito está creando un objeto simulado y no ejecutando realmente el método.

    Ten en cuenta que esta prueba asume que la clase ZZZ tiene un constructor sin parámetros. Si no es así, deberás modificar el código en consecuencia (por ejemplo, utilizar un framework de simulación como PowerMock para simular constructores con argumentos).

Comments are closed.