Testeando con JUnit
La forma más eficiente de escribir tests es hacerlo antes de escribir el código, y este enfoque es lo que se conoce como Test-Driven Development (TDD), escribir un test o serie de tests antes de empezar el desarrollo de una nueva feature, da al desarrollador un objetivo claro de qué desarrollar. Conocido como "red then green", esta filosofía indica que antes del desarrollo de esa nueva funcionalidad, todos los test fallarán, y al terminar todos pasarán.
Dentro de todos los tipos de pruebas a los que podemos someter nuestro código, las pruebas unitarias son la más básicas y utilizadas.
JUnit es la librería estandar de Java para ejecutar las pruebas unitarias. Si tenemos nuestro codigo en /src/main/java/example.java es común que la ubicación para nuestras pruebas unitarias de ese código se ubiquen en /src/test/java/exampleTests.java
Una prueba unitaria no es más que un método en una clase con la anotación @Test y que contiene asserts (aserciones). Estos métodos son siempre públicos y devuelven void. Ejemplo:
Ningún test deberá depender de otro test para poder ser probado! Esto no sólo es una buena práctica sino que desconocemos el orden en el que se ejecutarán las pruebas unitarias.
Si muchos test comparten la misma funcionalidad siempre se puede añadir un método no de pruebas a la clase a modo de helper.
A veces un conjunto de variables u objetos necesitan ser utilizados por nuestras pruebas unitarias, y podemos necesitar entonces preinicializarlos o limpiarlos después de terminar con nuestras pruebas. Para este proposito, JUNit dispone de unas anotaciones especiales de método que nos permitirán ejecutar métodos antes y depués de nuestras pruebas:
Ejemplo de un fichero de pruebas unitarias:
JUnit puede ser lanzado desde la consola o desde casi cualquier IDE. La ventaja de hacerlo con el IDE es que podemos debuggear si queremos la ejecución de los test, no es realmente interesante pero se puede hacer. Lo que si que es interesantísimo es que podemos visualizar que partes del código fueron testeadas y cuantas veces. Documentación oficial con todas las anotaciones posibles, ejemplos y aserciones disponibles:
https://junit.org/junit5/docs/current/user-guide/ https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html
Dentro de todos los tipos de pruebas a los que podemos someter nuestro código, las pruebas unitarias son la más básicas y utilizadas.
Pruebas Unitarias/Unit Tests
Son los tests más básicos y de más bajo nivel, que sirven para chequear un componente en particular de la aplicación, como por ejemplo chequear que un método de nuestro código maneja adecuadamente los datos que se le pasan como parámetros, o que el estado de un objeto se actualiza correctamente después de que el método de actualización se haya invocado. Unit Tests no chequea User Stories, sino los pasos individuales.JUnit es la librería estandar de Java para ejecutar las pruebas unitarias. Si tenemos nuestro codigo en /src/main/java/example.java es común que la ubicación para nuestras pruebas unitarias de ese código se ubiquen en /src/test/java/exampleTests.java
Una prueba unitaria no es más que un método en una clase con la anotación @Test y que contiene asserts (aserciones). Estos métodos son siempre públicos y devuelven void. Ejemplo:
Ningún test deberá depender de otro test para poder ser probado! Esto no sólo es una buena práctica sino que desconocemos el orden en el que se ejecutarán las pruebas unitarias.
Si muchos test comparten la misma funcionalidad siempre se puede añadir un método no de pruebas a la clase a modo de helper.
A veces un conjunto de variables u objetos necesitan ser utilizados por nuestras pruebas unitarias, y podemos necesitar entonces preinicializarlos o limpiarlos después de terminar con nuestras pruebas. Para este proposito, JUNit dispone de unas anotaciones especiales de método que nos permitirán ejecutar métodos antes y depués de nuestras pruebas:
@BeforeAll @BeforeEach @Test @AfterEach @AfterAll
Ejemplo de un fichero de pruebas unitarias:
public class ExampleTests {
private List testList;
public ExampleTests() {
}
@BeforeEach
public void beforeEach() {
this.testList = new ArrayList();
this.testList.add(1);
this.testList.add(2);
this.testList.add(3);
}
@AfterEach
public void afterEach() {
this.testList = null;
}
@Test
public void testAddZero() {
int a = 10;
int b = 0;
int c = a + b;
Assertions.assertEquals(a, c);
}
@Test
public void testDivideZero() {
int a = 10;
int b = 0;
Assertions.assertThrows(ArithmeticException.class, () -> {
int var10000 = a / b;
});
}
@Test
public void testListContains() {
Assertions.assertTrue(this.testList.contains(1));
this.testList.remove(0);
Assertions.assertFalse(this.testList.contains(1));
}
}
JUnit puede ser lanzado desde la consola o desde casi cualquier IDE. La ventaja de hacerlo con el IDE es que podemos debuggear si queremos la ejecución de los test, no es realmente interesante pero se puede hacer. Lo que si que es interesantísimo es que podemos visualizar que partes del código fueron testeadas y cuantas veces. Documentación oficial con todas las anotaciones posibles, ejemplos y aserciones disponibles:
https://junit.org/junit5/docs/current/user-guide/ https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html
Comentarios
Publicar un comentario