Mock Final Classes e Métodos com Mockito
1. Visão geral
Neste breve artigo, vamos nos concentrar em como simular classes e métodos finais - usando Mockito.
Tal como acontece com outros artigos focados na estrutura Mockito (comoMockito Verify,Mockito When/Then eMockito’s Mock Methods), usaremos a classeMyList mostrada abaixo como o colaborador em casos de teste.
Adicionaremos um novo método para este tutorial:
public class MyList extends AbstractList {
final public int finalMethod() {
return 0;
}
}
E também vamos estendê-lo com uma subclassefinal:
public final class FinalList extends MyList {
@Override
public int size() {
return 1;
}
}
2. Configurar Mockito para Métodos Finais e Classes
Antes que o Mockito possa ser usado para zombar das classes e métodos finais, ele precisa ser configurado.
Precisamos adicionar um arquivo de texto ao diretóriosrc/test/resources/mockito-extensions do projeto chamadoorg.mockito.plugins.MockMakere adicionar uma única linha de texto:
mock-maker-inline
Mockito verifica o diretórioextensions para arquivos de configuração quando é carregado. Este arquivo permite a zombaria dos métodos e classes finais.
3. Zombe de um método final
Once Mockito is properly configured, a final method can be mocked like any other:
@Test
public void whenMockFinalMethodMockWorks() {
MyList myList = new MyList();
MyList mock = mock(MyList.class);
when(mock.finalMethod()).thenReturn(1);
assertNotEquals(mock.finalMethod(), myList.finalMethod());
}
Ao criar uma instância concreta e uma instância simulada deMyList, podemos comparar os valores retornados por ambas as versões definalMethod()e verificar se a simulação é chamada.
4. Zombe de uma aula final
Zombar de uma aula final é tão fácil quanto zombar de qualquer outra classe:
@Test
public void whenMockFinalClassMockWorks() {
FinalList finalList = new FinalList();
FinalList mock = mock(FinalList.class);
when(mock.size()).thenReturn(2);
assertNotEquals(mock.size(), finalList.size());
}
Semelhante ao teste acima, criamos uma instância concreta e uma instância simulada de nossa classe final, simulamos um método e verificamos se a instância simulada se comporta de maneira diferente.
5. Conclusão
Neste tutorial rápido, abordamos como zombar de classes e métodos finais com o Mockito usando uma extensão do Mockito.
Os exemplos completos, como sempre, podem ser encontradosover on GitHub.