Учебники

Мокито — Обзор

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

Mockito

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

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

Преимущества Мокито

  • Нет рукописного ввода — не нужно писать фиктивные объекты самостоятельно.

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

  • Поддержка возвращаемых значений — Поддерживает возвращаемые значения.

  • Поддержка исключений — Поддерживает исключения.

  • Поддержка проверки заказа — Поддерживает проверку порядка вызовов методов.

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

Нет рукописного ввода — не нужно писать фиктивные объекты самостоятельно.

Рефакторинг Safe — переименование имен методов интерфейса или изменение порядка параметров не нарушит тестовый код, так как Mocks создаются во время выполнения.

Поддержка возвращаемых значений — Поддерживает возвращаемые значения.

Поддержка исключений — Поддерживает исключения.

Поддержка проверки заказа — Поддерживает проверку порядка вызовов методов.

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

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

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

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

Портфолио — объект для хранения списка акций и получения рыночной стоимости, рассчитанной с использованием цен акций и количества акций.

Запас — объект для переноса деталей запаса, таких как его идентификатор, имя, количество и т. Д.

StockService — Служба акций возвращает текущую цену акций.

mock (…) — Mockito создал макет стокового сервиса.

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

portfolio.setStocks (…) — Портфель теперь содержит список из двух акций.

portfolio.setStockService (…) — Назначает объект-макет stockService портфелю.

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