Учебники

EasyMock — Обзор

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

EasyMock

EasyMock позволяет легко создавать фиктивные объекты. Он использует Java Reflection для создания фиктивных объектов для данного интерфейса. Поддельные объекты — не что иное, как прокси для реальных реализаций. Рассмотрим случай с Stock Service, который возвращает информацию о цене акции. Во время разработки фактическая служба запаса не может быть использована для получения данных в реальном времени. Так что нам нужна фиктивная реализация стокового сервиса. EasyMock может сделать то же самое очень легко, как предполагает его название.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

package com.tutorialspoint.mock;

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

import org.EasyMock.EasyMock;

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 stocks = new ArrayList();
      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 = EasyMock.createMock(StockService.class);

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

      EasyMock.replay(stockServiceMock);

      //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 — Служба акций возвращает текущую цену акций.

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

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

EasyMock.replay (…) — EasyMock подготавливает объект Mock к готовности, чтобы его можно было использовать для тестирования.

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

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

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