EasyMock - Visão geral
O que é zombar?
Zombar é uma forma de testar a funcionalidade de uma classe isoladamente. A simulação não requer uma conexão de banco de dados ou leitura de arquivo de propriedades ou leitura de servidor de arquivo para testar uma funcionalidade. Objetos de simulação fazem a zombaria do serviço real. Um objeto fictício retorna um dado fictício correspondente a alguma entrada fictícia passada a ele.
EasyMock
EasyMock facilita a criação de objetos simulados perfeitamente. Ele usa o Java Reflection para criar objetos fictícios para uma determinada interface. Objetos de simulação nada mais são do que proxy para implementações reais. Considere um caso de Stock Service que retorna os detalhes do preço de um estoque. Durante o desenvolvimento, o serviço de estoque real não pode ser usado para obter dados em tempo real. Portanto, precisamos de uma implementação fictícia do serviço de estoque. EasyMock pode fazer o mesmo facilmente, como seu nome sugere.
Benefícios do EasyMock
No Handwriting - Não há necessidade de escrever objetos fictícios por conta própria.
Refactoring Safe - Renomear nomes de métodos de interface ou reordenar parâmetros não interromperá o código de teste, já que Mocks são criados em tempo de execução.
Return value support - Suporta valores de retorno.
Exception support - Suporta exceções.
Order check support - Suporta verificação na ordem das chamadas de método.
Annotation support - Suporta a criação de simulações usando anotação.
Considere o seguinte trecho 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.