Mockito - Descripción general

¿Qué es burlarse?

Burlarse es una forma de probar la funcionalidad de una clase de forma aislada. La simulación no requiere una conexión a la base de datos o la lectura del archivo de propiedades o la lectura del servidor de archivos para probar una funcionalidad. Los objetos simulados hacen la burla del verdadero servicio. Un objeto simulado devuelve datos ficticios correspondientes a alguna entrada ficticia que se le ha pasado.

Mockito

Mockito facilita la creación de objetos simulados sin problemas. Utiliza Java Reflection para crear objetos simulados para una interfaz determinada. Los objetos simulados no son más que un proxy de implementaciones reales.

Considere un caso de Stock Service que devuelve los detalles del precio de una acción. Durante el desarrollo, el servicio de stock real no se puede utilizar para obtener datos en tiempo real. Por tanto, necesitamos una implementación ficticia del servicio de stock. Mockito puede hacer lo mismo con mucha facilidad, como sugiere su nombre.

Beneficios de Mockito

  • No Handwriting - No es necesario escribir objetos simulados por su cuenta.

  • Refactoring Safe - Renombrar los nombres de los métodos de la interfaz o reordenar los parámetros no romperá el código de prueba, ya que los Mocks se crean en tiempo de ejecución.

  • Return value support - Soporta valores de retorno.

  • Exception support - Soporta excepciones.

  • Order check support - Admite la verificación del orden de las llamadas a métodos.

  • Annotation support - Admite la creación de simulacros mediante anotaciones.

Considere el siguiente fragmento 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);
   }
}

Entendamos los conceptos importantes del programa anterior. El código completo está disponible en el capítuloFirst Application.

  • Portfolio - Un objeto para llevar una lista de existencias y obtener el valor de mercado calculado utilizando los precios de las acciones y la cantidad de existencias.

  • Stock - Un objeto para llevar los detalles de un stock como su id, nombre, cantidad, etc.

  • StockService - Un servicio de acciones devuelve el precio actual de una acción.

  • mock(...) - Mockito creó un simulacro de servicio de stock.

  • when(...).thenReturn(...)- Implementación simulada del método getPrice de la interfaz stockService. Para googleStock, devuelve 50,00 como precio.

  • portfolio.setStocks(...) - La cartera ahora contiene una lista de dos acciones.

  • portfolio.setStockService(...) - Asigna el objeto stockService Mock a la cartera.

  • portfolio.getMarketValue() - La cartera devuelve el valor de mercado en función de sus acciones utilizando el servicio de acciones simuladas.