EasyMock - Übersicht

Was ist Spott?

Das Verspotten ist eine Möglichkeit, die Funktionalität einer Klasse isoliert zu testen. Das Verspotten erfordert keine Datenbankverbindung oder das Lesen von Eigenschaftendateien oder Dateiservern, um eine Funktionalität zu testen. Scheinobjekte verspotten den eigentlichen Dienst. Ein Scheinobjekt gibt Dummy-Daten zurück, die einer an ihn übergebenen Dummy-Eingabe entsprechen.

EasyMock

EasyMock erleichtert das nahtlose Erstellen von Scheinobjekten. Es verwendet Java Reflection, um Scheinobjekte für eine bestimmte Schnittstelle zu erstellen. Scheinobjekte sind nichts anderes als ein Proxy für tatsächliche Implementierungen. Stellen Sie sich einen Fall von Stock Service vor, der die Preisdetails einer Aktie zurückgibt. Während der Entwicklung kann der eigentliche Lagerservice nicht zum Abrufen von Echtzeitdaten verwendet werden. Wir brauchen also eine Dummy-Implementierung des Stock Service. EasyMock kann das sehr einfach tun, wie der Name schon sagt.

Vorteile von EasyMock

  • No Handwriting - Sie müssen keine Scheinobjekte selbst schreiben.

  • Refactoring Safe - Durch das Umbenennen von Schnittstellenmethodennamen oder das Neuordnen von Parametern wird der Testcode nicht beschädigt, da zur Laufzeit Mocks erstellt werden.

  • Return value support - Unterstützt Rückgabewerte.

  • Exception support - Unterstützt Ausnahmen.

  • Order check support - Unterstützt die Überprüfung der Reihenfolge von Methodenaufrufen.

  • Annotation support - Unterstützt das Erstellen von Mocks mithilfe von Anmerkungen.

Betrachten Sie das folgende Code-Snippet.

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.