logo

Simulado vs. Stub vs. Espião

Zombar

Mocks são os objetos que armazenam chamadas de método. É conhecido como wrappers dinâmicos para dependências usadas nos testes. É usado para registrar e verificar a interação entre as classes Java. Uma simulação é conhecida como a versão mais poderosa e flexível das duplas de teste. Usamos um método para zombar chamado zombar() .

A principal função do uso de mocks é fornecer controle total sobre o comportamento dos objetos simulados. Os objetos simulados são geralmente usados ​​para verificação de comportamento . O termo comportamento significa verificar os métodos e caminhos corretos aplicados aos objetos.

As simulações são criadas principalmente usando uma biblioteca ou estrutura de simulação como Mockito, JMock e EasyMock. É usado para testar um grande conjunto de testes onde os stubs não são suficientes. Uma das funções essenciais do mock é verificar quantas vezes um determinado método é chamado.

O trecho de código a seguir mostra como usar mock().

 ToDoService doService = mock(ToDoService.class); 

Esboço

Stubs são os objetos que contêm dados predefinidos e os utilizam para fornecer respostas durante os testes. Em outras palavras, um stub é um objeto que se assemelha a um objeto real com o número mínimo de métodos necessários para um teste. Stubs são usados ​​quando não queremos usar objetos que dariam uma resposta com dados reais. Um stub é chamado de versão mais leve e mais estática do teste.

As principais funções dos stubs são:

  • Ele sempre retorna a saída predefinida, independentemente da entrada.
  • Ele pode ser usado para se assemelhar aos objetos do banco de dados.
  • Stubs são usados ​​para reduzir as complexidades que ocorrem durante a criação dos objetos reais. Eles são usados ​​principalmente para realizar verificação de estado .

Espião

Os espiões são conhecidos como objetos parcialmente simulados . Isso significa que o espião cria um objeto parcial ou meio manequim do objeto real, stubando ou espionando os reais. Na espionagem, o objeto real permanece inalterado e apenas espionamos alguns métodos específicos dele. Em outras palavras, pegamos o objeto existente (real) e substituir ou espião apenas alguns de seus métodos.

Spies são úteis quando temos uma classe enorme cheia de métodos e queremos zombar de certos métodos. Neste cenário, devemos preferir usar espiões em vez de simulações e stubs. Ele chama o comportamento real do método, se os métodos não estiverem em stub.

No Mockito, o método spy() é usado para criar objetos espiões. Isso nos permite chamar os métodos normais do objeto real. O trecho de código a seguir mostra como usar o método spy().

 List spyArrayList = spy(ArrayList.class); 

Diferença entre Stub e Mock

Parâmetros Esboço Zombar
Fonte de dados A fonte de dados dos stubs é codificada permanentemente. Geralmente está fortemente acoplado ao conjunto de testes. Os dados nas simulações são configurados pelos testes.
Criado por Os stubs geralmente são manuscritos e alguns são gerados por ferramentas. Os mocks geralmente são criados usando bibliotecas de terceiros, como Mockito, JMock e WireMock.
Uso Stubs são usados ​​principalmente para conjuntos de testes simples. Mocks são usados ​​principalmente para grandes conjuntos de testes.
Interface gráfica do usuário (GUI) Os stubs não possuem uma GUI. As simulações têm uma GUI.

A seguir estão algumas diferenças entre o mock e o espião:

Parâmetros Zombar Espião
Uso Mocks são usados ​​para criar objetos totalmente simulados ou fictícios. É usado principalmente em grandes suítes de testes. Spies são usados ​​para criar objetos parciais ou meio simulados. Assim como o mock, os espiões também são usados ​​em grandes conjuntos de testes.
Comportamento padrão Ao usar objetos simulados, o comportamento padrão dos métodos (quando não estão em stub) é não fazer nada (não executar nada). Ao usar objetos espiões, o comportamento padrão dos métodos (quando não estão em stub) é o comportamento real do método.

Em nossos tutoriais anteriores, discutimos alguns exemplos de stub, zombaria e espionagem. Para entender melhor a diferença entre stubbing, zombaria e espionagem, veja os exemplos.

encadeamento direto