EasyMock - Panoramica
Cos'è il Mocking?
Il mocking è un modo per testare la funzionalità di una classe in isolamento. Il mocking non richiede una connessione al database o la lettura del file delle proprietà o della lettura del file server per testare una funzionalità. Gli oggetti fittizi prendono in giro il vero servizio. Un oggetto fittizio restituisce un dato fittizio corrispondente a un input fittizio passato ad esso.
EasyMock
EasyMock facilita la creazione di oggetti fittizi senza interruzioni. Utilizza Java Reflection per creare oggetti fittizi per una determinata interfaccia. Gli oggetti fittizi non sono altro che proxy per le implementazioni effettive. Si consideri un caso di Stock Service che restituisce i dettagli del prezzo di un'azione. Durante lo sviluppo, il servizio di magazzino effettivo non può essere utilizzato per ottenere dati in tempo reale. Quindi abbiamo bisogno di un'implementazione fittizia del servizio di magazzino. EasyMock può fare lo stesso molto facilmente come suggerisce il nome.
Vantaggi di EasyMock
No Handwriting - Non c'è bisogno di scrivere oggetti fittizi da soli.
Refactoring Safe - La ridenominazione dei nomi dei metodi di interfaccia o il riordino dei parametri non interromperà il codice di test poiché i mock vengono creati in fase di esecuzione.
Return value support - Supporta i valori di ritorno.
Exception support - Supporta le eccezioni.
Order check support - Supporta il controllo dell'ordine delle chiamate ai metodi.
Annotation support - Supporta la creazione di mock utilizzando l'annotazione.
Considera il seguente frammento di codice.
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.