DEV Community

Cover image for TDD e testes com Mocks
pedro-henrique-arruzzo
pedro-henrique-arruzzo

Posted on • Edited on

2 2

TDD e testes com Mocks

TDD

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

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.

Exemplos

É 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);
}
Enter fullscreen mode Exit fullscreen mode

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));
}
Enter fullscreen mode Exit fullscreen mode

Neste teste, um usuário e um filme foram iniciados e o serviço de locação foi mockado.

Conclusão

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

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up