Mock Final Classes e Métodos com Mockito

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.