Mockito - Обзор

Что такое издевательство?

Мокинг - это способ изолированно проверить функциональность класса. Мокинг не требует подключения к базе данных, чтения файла свойств или чтения файлового сервера для проверки функциональности. Мок-объекты имитируют реальный сервис. Мок-объект возвращает фиктивные данные, соответствующие переданному ему фиктивному вводу.

Mockito

Mockito упрощает создание фиктивных объектов. Он использует Java Reflection для создания фиктивных объектов для данного интерфейса. Мок-объекты - это не что иное, как прокси для реальных реализаций.

Рассмотрим случай Stock Service, который возвращает подробную информацию о цене акции. Во время разработки фактический сервис складских запасов нельзя использовать для получения данных в реальном времени. Итак, нам нужна фиктивная реализация стокового сервиса. Mockito может делать то же самое очень легко, как следует из названия.

Преимущества Mockito

  • No Handwriting - Не нужно самостоятельно писать макеты объектов.

  • Refactoring Safe - Переименование имен методов интерфейса или изменение порядка параметров не нарушат работу тестового кода, так как Mocks создаются во время выполнения.

  • Return value support - Поддерживает возвращаемые значения.

  • Exception support - Поддерживает исключения.

  • Order check support - Поддерживает проверку порядка вызовов методов.

  • Annotation support - Поддерживает создание макетов с использованием аннотаций.

Рассмотрим следующий фрагмент кода.

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);
   }
}

Давайте разберемся с важными концепциями вышеуказанной программы. Полный код доступен в главеFirst Application.

  • Portfolio - Объект для хранения списка акций и получения рыночной стоимости, рассчитанной с использованием цен акций и количества запасов.

  • Stock - Объект, содержащий подробную информацию об акции, такую ​​как ее идентификатор, название, количество и т. Д.

  • StockService - Сервис акций возвращает текущую цену акции.

  • mock(...) - Mockito создал имитацию стокового сервиса.

  • when(...).thenReturn(...)- Мок-реализация метода getPrice интерфейса stockService. Для googleStock верните 50,00 в качестве цены.

  • portfolio.setStocks(...) - В портфеле теперь есть список из двух акций.

  • portfolio.setStockService(...) - Присваивает портфолио объект StockService Mock.

  • portfolio.getMarketValue() - Портфель возвращает рыночную стоимость на основе своих акций с использованием сервиса фиктивных акций.