Crear nuevo proyecto maven.
Añadir en el pom.xml dentro de la etiqueta project:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Los test se crean en paquetes java dentro del directorio src/test/java
Se crean clases java con métodos donde cada uno lleva la anotación @Test
.
Mediante el uso de aserciones (métodos de la clase Asssertions) testeamos métodos
del código principal (src/main/java
).
En cada clase de test, añadir el siguiente import:
import static org.junit.jupiter.api.Assertions.*;
- Aserciones, cómo crear tests, cómo testear
- @DisplayName
- assertAll()
- assertThrows()
- @BeforeEach, @AfterEach, @BeforeAll, @AfterAll
- @Disabled
- Tests condicionales:
- Anotaciones: @Enabled...
- Assumptions: assumeTrue()...
- @Nested
- Tests con repetición:
- @RepeatedTest
- @ParameterizedTest
- @Tag
- Suites de testing
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html
- Controlador: clases que reciben peticiones HTTP y ejecutan métodos de servicios/repositorios para llevar una acción
- Servicio
- Repositorio
- Servicio: clase que recibe las llamadas de los controladores, tienen métodos para realizar acciones CRUD y demás acciones de lógica de negocio.
- Servicio
- Repositorio
- Repositorio: capa que interactúa con la base de datos para realizar las operaciones CRUD.
Las entidades se utilizan en todas las anteriores.
método Controlador --> Método Servicio 1 --> Método Servicio 2 --> método Repositorio 1
Se harán test para cada uno de forma individualizada. Por lo tanto no es necesario que desde cualquiera de ellos se testeen también sus dependencias.
No tener que testear todo una y otra vez.
método Controlador --> Mock Servicio 1
Framework para facilitar el testing de métodos de clases que tienen/usan dependencia/s.
Las clases que normalmente se testean con mockito van a ser capas:
- Controlador que depende de un servicio. El servicio es una dependencia y se puede hacer mock de la misma.
- Servicio que depende de un repositorio. El repositorio es una dependencia y se puede hacer mock de la misma.
- Servicio que depende de otro servicio. El repositorio es una dependencia y se puede hacer mock de la misma.
EmployeeService que depende de EmployeeRepository.
- JUnit
Al testear EmployeeService se está ejecutando EmployeeRepository
- Métodos assert (JUnit): sirven para comprobar si se cumple una condición sobre el resultado obtenido.
- Método verify (Mockito): sirve para verificar si un método en el mock ha sido ejecutado un número determinado de veces.
- Configurar mock/s: when(), thenReturn()
- Ejecutar el comportamiento o método a testear
- Comprobar y verificar
- Utilizando el método estático
mock()
- Utilizando las anotaciones
@Mock
y@InjectMocks
inicializando@ExtendWith(MockitoExtension.class)
- Utilizando las anotaciones
@Mock
y@InjectMocks
inicializandoMockitoAnnotations.openMocks(this)
en un setUp()
- Crear casos de test para lograr ~80 % de cobertura
- JUnit y Mockito