Mockito - Visão geral

O que é zombar?

Zombar é uma forma de testar a funcionalidade de uma classe isoladamente. A simulação não requer uma conexão de banco de dados ou leitura de arquivo de propriedades ou leitura de servidor de arquivo para testar uma funcionalidade. Objetos de simulação fazem a zombaria do serviço real. Um objeto fictício retorna um dado fictício correspondente a alguma entrada fictícia passada a ele.

Mockito

Mockito facilita a criação de objetos simulados perfeitamente. Ele usa o Java Reflection para criar objetos fictícios para uma determinada interface. Objetos de simulação nada mais são do que proxy para implementações reais.

Considere um caso de Stock Service que retorna os detalhes do preço de um estoque. Durante o desenvolvimento, o serviço de estoque real não pode ser usado para obter dados em tempo real. Portanto, precisamos de uma implementação fictícia do serviço de estoque. Mockito pode fazer o mesmo facilmente, como o próprio nome sugere.

Benefícios do Mockito

  • No Handwriting - Não há necessidade de escrever objetos fictícios por conta própria.

  • Refactoring Safe - Renomear nomes de métodos de interface ou reordenar parâmetros não interromperá o código de teste, já que Mocks são criados em tempo de execução.

  • Return value support - Suporta valores de retorno.

  • Exception support - Suporta exceções.

  • Order check support - Suporta verificação na ordem das chamadas de método.

  • Annotation support - Suporta a criação de simulações usando anotação.

Considere o seguinte trecho de código.

package com.tutorialspoint.mock;

import java.util.ArrayList;
import java.util.List;

import static org.mockito.Mockito.*;

public class PortfolioTester {
   public static void main(String[] args){

      //Create a portfolio object which is to be tested		
      Portfolio portfolio = new Portfolio();

      //Creates a list of stocks to be added to the portfolio
      List<Stock> stocks = new ArrayList<Stock>();
      Stock googleStock = new Stock("1","Google", 10);
      Stock microsoftStock = new Stock("2","Microsoft",100);

      stocks.add(googleStock);
      stocks.add(microsoftStock);		

      //Create the mock object of stock service
      StockService stockServiceMock = mock(StockService.class);

      // mock the behavior of stock service to return the value of various stocks
      when(stockServiceMock.getPrice(googleStock)).thenReturn(50.00);
      when(stockServiceMock.getPrice(microsoftStock)).thenReturn(1000.00);

      //add stocks to the portfolio
      portfolio.setStocks(stocks);

      //set the stockService to the portfolio
      portfolio.setStockService(stockServiceMock);

      double marketValue = portfolio.getMarketValue();

      //verify the market value to be 
      //10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500
      System.out.println("Market value of the portfolio: "+ marketValue);
   }
}

Vamos entender os conceitos importantes do programa acima. O código completo está disponível no capítulo First Application.

  • Portfolio - Um objeto para carregar uma lista de ações e obter o valor de mercado calculado usando preços de ações e quantidade de ações.

  • Stock - Um objeto para transportar os detalhes de um estoque, como id, nome, quantidade, etc.

  • StockService - Um serviço de estoque retorna o preço atual de um estoque.

  • mock(...) - Mockito criou uma simulação de serviço de estoque.

  • when(...).thenReturn(...)- Implementação simulada do método getPrice da interface stockService. Para googleStock, devolva 50,00 como preço.

  • portfolio.setStocks(...) - A carteira agora contém uma lista de duas ações.

  • portfolio.setStockService(...) - Atribui o objeto stockService Mock ao portfólio.

  • portfolio.getMarketValue() - A carteira retorna o valor de mercado com base em suas ações usando o serviço de ações simuladas.