EasyMock - przegląd

Co to jest kpina?

Mockowanie to sposób na przetestowanie funkcjonalności klasy w izolacji. Mockowanie nie wymaga połączenia z bazą danych ani odczytu pliku właściwości ani odczytu serwera plików w celu przetestowania funkcjonalności. Pozorowane obiekty kpią z prawdziwej usługi. Obiekt pozorowany zwraca fikcyjne dane odpowiadające jakimś fałszywym danym wejściowym przekazanym do niego.

EasyMock

EasyMock ułatwia płynne tworzenie pozorowanych obiektów. Używa Java Reflection do tworzenia pozorowanych obiektów dla danego interfejsu. Obiekty pozorowane to nic innego jak proxy dla rzeczywistych implementacji. Rozważmy przypadek usługi magazynowej, która zwraca szczegóły ceny akcji. Podczas opracowywania rzeczywistej usługi magazynowej nie można używać do uzyskiwania danych w czasie rzeczywistym. Potrzebujemy więc fikcyjnej implementacji usługi magazynowej. EasyMock może zrobić to samo bardzo łatwo, jak sugeruje jego nazwa.

Zalety EasyMock

  • No Handwriting - Nie ma potrzeby samodzielnego pisania pozorowanych obiektów.

  • Refactoring Safe - Zmiana nazw metod interfejsu lub zmiana kolejności parametrów nie zepsuje kodu testu, ponieważ makiety są tworzone w czasie wykonywania.

  • Return value support - Obsługuje zwracane wartości.

  • Exception support - Obsługuje wyjątki.

  • Order check support - Obsługuje sprawdzanie kolejności wywołań metod.

  • Annotation support - Obsługuje tworzenie mocków za pomocą adnotacji.

Rozważ następujący fragment kodu.

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

Let's understand the important concepts of the above program. The complete code is available in the chapter First Application.

  • Portfolio – An object to carry a list of stocks and to get the market value computed using stock prices and stock quantity.

  • Stock – An object to carry the details of a stock such as its id, name, quantity, etc.

  • StockService – A stock service returns the current price of a stock.

  • EasyMock.createMock(...) – EasyMock created a mock of stock service.

  • EasyMock.expect(...).andReturn(...) – Mock implementation of getPrice method of stockService interface. For googleStock, return 50.00 as price.

  • EasyMock.replay(...) – EasyMock prepares the Mock object to be ready so that it can be used for testing.

  • portfolio.setStocks(...) – The portfolio now contains a list of two stocks.

  • portfolio.setStockService(...) - Assigns the stockService Mock object to the portfolio.

  • portfolio.getMarketValue() – The portfolio returns the market value based on its stocks using the mock stock service.