Testes Unitários - Argument Captor
Testes Unitários - Argument Captor
Como esse recurso pode ser útil?
Argument Captor é um ótimo recurso que pode ser utilizado para realizar testes em objetos que são passados como parâmetros em métodos que estão em seu código..
É muito útil quando pretendemos cobrir uma funcionalidade legada muito complexa com testes automatizados e sabemos o que esperar daquele objeto, utilizando por exemplo, um teste funcional.
Ele ajuda a verificar o estado do objeto após longas execuções de código, que em muitas vezes, podem estar repleto de condicionais que o afetam.
Como adicionar no projeto?
Para utilizá-lo, é necessário adicionar as bibliotecas do JUnit e do Mockito ao seu projeto. Utilizando o Maven, isso pode ser feito adicionando as seguintes dependências no arquivo pom.xml.
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
Como utilizar?
Para utilizar, é necessário importar as classes responsáveis por fazer a captura e também o recurso de verificação do Mockito. São eles:
import static org.mockito.ArgumentCaptor.forClass;
import static org.mockito.Mockito.verify;
import org.mockito.ArgumentCaptor;
No teste unitário, iniciar o o ArgumentCaptor, executar o processamento do service, fazer a captura do objeto e finalizar testando o objeto capturado, conforme demonstrado no exemplo abaixo.
@Test
public void shouldSendBillByEmailWithNewQuantity() {
Double valueExpectedAfterApplyTheRule = 110.0;
Bill bill = new Bill();
bill.setId(10);
bill.setQuantity(100.0);
bill.setNote("Some note");
ArgumentCaptor<Bill> billcaptured = forClass(Bill.class);
billService.process(bill);
verify(billEmailService).sendBillByEmail(billcaptured.capture());
Assert.assertEquals(valueExpectedAfterApplyTheRule, billcaptured.getValue().getQuantity());
}
Fontes do projeto
https://github.com/augustocolombelli/unit-tests-argument-captor