15
TDD e testes com Mocks
Test Driven Development é uma maneira de desenvolver o seu código onde o teste é criado antes da alteração/criação do código. Isso é feito para que o desenvolvimento tenha a garantia de sua funcionalidade.
O teste deve ser a primeira coisa a ser feita para que o código seja desenvolvido em volta desse teste para que, ao final do desenvolvimento, o mesmo esteja funcionando, provando que o código funciona.
Uma boa maneira de realizar estes testes é utilizando o Mockito.
Mockito é um framework de mocking que é frequentemente usado em
testes de unidade. Mockar um objeto é simular o seu comportamento. Ao criar esta simulação, fica possível realizar um teste sem precisar chamar um objeto complexo, chamamos apenas o mock.
É necessário iniciar os mocks antes dos testes.
@Before
public void setup(){
service = new RentService();
RentDAO dao = Mockito.mock(RentDAO.class);
service.setRentDao(dao);
spcService = Mockito.mock(SPCService.class);
service.setSpcService(spcService);
}
Estou simulando as interfaces RentDAO e SPCService com o Mockito.
RentDAO: public void save(Rent rent);
SPCService: public boolean isNegative(User user);
Com isso podemos realizar o teste chamando o mock.
@Test
public void rentTest() throws Exception {
//given
User user = UserBuilder.aUser().now();
List<Movie> movies = Arrays.asList(MovieBuilder.aMovie().withValue(5.0).now());
//when
Rent rent = service.rentMovie(user, movies);
//then
error.checkThat(rent.getValue(), is(equalTo(5.0)));
error.checkThat(DataUtils.isSameDate(rent.getRentDate(), new Date()), is(true));
error.checkThat(DataUtils.isSameDate(rent.getReturnDate(), DataUtils.obtainDataInDifferenceInDays(1)), is(true));
}
Neste teste, um usuário e um filme foram iniciados e o serviço de locação foi mockado.
Desta maneira, é possível testar se o serviço de locação funciona sem fazer, de fato, uma locação.
Isso é útil para evitar, por exemplo, idas desnecessárias ao banco de dados, basta mockar o objeto que faz a chamada.
Caso esteja interessado, aqui está o repositório no GitHub com mais testes mockados: https://github.com/pedro-henrique-arruzzo/poc/tree/main/MockTests
15