Para hacer tests sobre los métodos de nuestros controladores REST, utilizaremos Junit y Mockito. Veamos en primer lugar un ejemplo completo, para pasar a explicarlo a continuación:
package es.um.atica.portalfundewebbackend;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import es.um.atica.portalfundewebbackend.entities.portalfundeweb.Componente;
import es.um.atica.portalfundewebbackend.repositories.portalfundeweb.ComponenteRepository;
import es.um.atica.portalfundewebbackend.repositories.portalfundeweb.ComunicacionComponenteRepository;
import es.um.atica.portalfundewebbackend.repositories.portalfundeweb.ComunicacionRepository;
import es.um.atica.portalfundewebbackend.rest.RestComunicaciones;
public class RestComunicacionesTest {
@Mock
private ComunicacionRepository comunicacionRespository;
@Mock
private ComponenteRepository componenteRepository;
@Mock
private ComunicacionComponenteRepository comunicacionComponenteRepository;
private RestComunicaciones restComunicaciones;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
restComunicaciones = new RestComunicaciones(comunicacionRespository, componenteRepository, comunicacionComponenteRepository);
Componente comp = new Componente(1L, "Componente de prueba", "Etiqueta", "Hola buenas tardes");
Mockito.when(componenteRepository.findById(comp.getId()))
.thenReturn(comp);
}
@Test
public void getComponenteById() {
Long id = 1L;
Componente found = restComunicaciones.getComponente(id);
assertThat(found.getId()).isEqualTo(id);
}
}
Como vemos, hacemos mocks de los repositorios, es decir, simulamos los datos de base de datos, pues en estos tests no se accede a la base de datos real. En primer lugar, tenemos el método setup, en el que inicializamos los mocks, nuestros servicios, e indicamos el comportamiento deseado de los métodos que vayamos a utilizar. Con la etiqueta @Before indicamos que esto se ejecutará siempre antes de hacer un test:
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
restComunicaciones = new RestComunicaciones(comunicacionRespository, componenteRepository, comunicacionComponenteRepository);
Componente comp = new Componente(1L, "Componente de prueba", "Etiqueta", "Hola buenas tardes");
Mockito.when(componenteRepository.findById(comp.getId()))
.thenReturn(comp);
}
En este caso, indicamos que se devuelva un componente concreto cuando se llama al método findById del repositorio.
Por último, el método que hace el test es getComponenteById, donde ha de cumplirse las condiciones que pongamos con assertThat:
@Test
public void getComponenteById() {
Long id = 1L;
Componente found = restComunicaciones.getComponente(id);
assertThat(found.getId()).isEqualTo(id);
}