EasyMock - Descripción general
¿Qué es burlarse?
La burla es una forma de probar la funcionalidad de una clase de forma aislada. La simulación no requiere una conexión a la base de datos o la lectura del archivo de propiedades o la lectura del servidor de archivos para probar una funcionalidad. Los objetos simulados hacen la burla del verdadero servicio. Un objeto simulado devuelve datos ficticios correspondientes a alguna entrada ficticia que se le ha pasado.
EasyMock
EasyMock facilita la creación de objetos simulados sin problemas. Utiliza Java Reflection para crear objetos simulados para una interfaz determinada. Los objetos simulados no son más que un proxy de implementaciones reales. Considere un caso de Stock Service que devuelve los detalles del precio de una acción. Durante el desarrollo, el servicio de stock real no se puede utilizar para obtener datos en tiempo real. Por tanto, necesitamos una implementación ficticia del servicio de stock. EasyMock puede hacer lo mismo muy fácilmente, como sugiere su nombre.
Beneficios de EasyMock
No Handwriting - No es necesario escribir objetos simulados por su cuenta.
Refactoring Safe - Cambiar el nombre de los métodos de la interfaz o reordenar los parámetros no romperá el código de prueba, ya que los simulacros se crean en tiempo de ejecución.
Return value support - Soporta valores de retorno.
Exception support - Admite excepciones.
Order check support - Admite la verificación del orden de las llamadas a métodos.
Annotation support - Admite la creación de simulaciones mediante anotaciones.
Considere el siguiente fragmento de código.
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.