programacion-avanzada / workspace-taller

Ejemplos canónicos del Taller de Programación Avanzada, UNLaM
32 stars 11 forks source link

Sugerencia: pruebas-junit [NovaSoft] #16

Closed omarquispe95 closed 3 years ago

omarquispe95 commented 3 years ago

Se podría agregar alguna clase Exception en el proyecto, asi se podria dar ejemplos en los casos de test trabajando con excepciones. Podría ser comparando el mensaje de la excepción usando “assertEquals”, o el método test espera la excepción utilizando “assertThrows”

Edit: adjunto un ejemplo para assertThrows

@Test
void casoAssertThrowsException() {
    Integer numero = null;
    Assert.assertThrows(NullPointerException.class, () -> {
      numero.toString();
    });
}
delucas commented 3 years ago

También se puede utilizar el expected dentro de la anotación de @Test. Pongamos ambos.

delucas commented 3 years ago

Referido en otro issue

omarquispe95 commented 3 years ago

Pruebas JUnit

Pruebas unitarias

Las pruebas unitarias son una herramienta que tenemos los desarrolladores para verificar que el código que escribimos se comporte de la manera que creemos y que necesitamos. Es un arma fundamental en el desarrollo de software, ampliamente utilizado.

¿Por qué utilizar pruebas unitarias?

Buenas prácticas

Las pruebas deben ser independientes, cualquier cambio en el código fuente no debe afectar los tests. Cada test debe probar un único escenario. Utilizar inyección de depencias, y al utilizarla utilizar interfaces y no implementaciones. Los resultados deben ser consistentes, nos tienen que garantizar que la salida es la esperada.

Capturar excepciones

A continuación se dejarán algunos ejemplos para probar si se lanzó una excepción. Dentro de JUnit 4 se realizará a través del atributo expected en la anotacion @Test con el tipo esperado. En cambio en JUnit 5, se prueba con el método assertThrows.

Por ejemplo, se desea probar que la siguiente operación aritmética "5/0", este caso debería arrojar una excepción del tipo ArithmeticException :

// En JUnit 4
@Test(expected = ArithmeticException.class)
public void esperoArithmeticException() {
    int n = 5/0;
}
// En JUnit 5
@Test
void casoAssertArithmeticException() {
    Assert.assertThrows(ArithmeticException.class, () -> {
        int n = 5/0;
    });
}

Otro ejemplo, es el que se quiere obtener la cadena String de una variable del tipo Integer sin inicializar, arrojará la excepción NullPointerException:

// En JUnit 4
@Test(expected = NullPointerException.class)
public void esperoNullPointerException() {
    Integer numero = null;
    numero.toString();
}
// En JUnit 5
@Test
void casoAssertThrowsNullPointerException() {
    Integer numero = null;
    Assert.assertThrows(NullPointerException.class, () -> {
        numero.toString();
    });
}

Ejemplos de Asserts

A continuación se dejarán ejemplos de tipos de Asserts para utilizar en JUnit, con la clase Punto

Patrón 4A

El patrón sugiere dividir las pruebas unitarias en 4 etapas

Fuentes: https://github.com/programacion-avanzada/workspace-taller/issues/url https://junit.org/junit4/javadoc/4.13/org/junit/Assert.html https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html https://www.baeldung.com/junit-assert-exception