Mockito
Framework que facilita o uso de mocks em testes unitários em Java
O que são teste unitário?
Teste de unidade é toda a aplicação de teste nas assinaturas de entradas e saídas de um sistema, consiste em validar dados válidos e inválidos via I/O (entrada/saída) sendo aplicado por desenvolvedores ou analistas de teste.
Uma unidade é a menor parte testável de um programa de computador. Em programação procedural, uma unidade pode ser uma função individual ou um procedimento. Idealmente, cada teste de unidade é independente dos demais, o que possibilita ao programador testar cada módulo isoladamente.
FONTE: Wikipédia
IDEIA: Testar a menor unidade testável.
Pirâmide de Testes - por Jason Huggins
O que são mocks?
Objetos pré-programados com informações que formam uma especificação das chamadas que esperam receber.
FONTE: Martin Fowler, na InfoQ
Exemplos práticos
Como criar um mock
List singleMock = mock(List.class); List singleMock = mock(Foo.class); @Mock private ArticleCalculator calculator;
Como simular um retorno
when(mockedList.get(0)).thenReturn("first");
when(mockedList.get(1)).thenThrow(new RuntimeException());
when(person.getAddress(anyString())).thenReturn("deep");
person.getAddress("the docks");
Como verificar se o método foi chamado
verify(mockedList).add("once");
verify(mockedList, never()).add("never happened");
verify(mockedList, atLeastOnce()).add("three times");
verify(mockedList, atLeast(2)).add("five times");
verify(mockedList, atMost(5)).add("three times");
Mock x Spy
Mock
Todos os métodos são mocks, ao menos que se configure para ser chamado o método real.Foo mock = mock(Foo.class); when(mock.someMethod()).thenCallRealMethod();
Spy
Todos os métodos são reais, ao menos que configure um retorno para o mesmo.List spy = spy(List.class); when(spy.size()).thenReturn(100);
Não existe bala de prata!
Frameworks não vão resolver todos os seus problemas.
A necessidade de criar muitos mocks, de fazer chamar muitos "when" e "verify" para fazer um teste de unidade é um alerta para a arquitetura do seu código.




Nenhum comentário:
Postar um comentário