EasyMock-概要
モックとは何ですか?
モックは、クラスの機能を分離してテストする方法です。モックは、機能をテストするためにデータベース接続やプロパティファイルの読み取りまたはファイルサーバーの読み取りを必要としません。モックオブジェクトは、実際のサービスのモックを実行します。モックオブジェクトは、渡されたダミー入力に対応するダミーデータを返します。
EasyMock
EasyMockは、モックオブジェクトのシームレスな作成を容易にします。特定のインターフェースのモックオブジェクトを作成するためにJavaReflectionを使用します。モックオブジェクトは、実際の実装のプロキシに他なりません。株式の価格の詳細を返すストックサービスのケースを考えてみましょう。開発中は、実際のストックサービスを使用してリアルタイムデータを取得することはできません。したがって、ストックサービスのダミー実装が必要です。EasyMockは、その名前が示すように非常に簡単に同じことを行うことができます。
EasyMockの利点
No Handwriting –自分でモックオブジェクトを作成する必要はありません。
Refactoring Safe –モックは実行時に作成されるため、インターフェイスメソッド名の名前を変更したり、パラメーターを並べ替えたりしても、テストコードが破損することはありません。
Return value support –戻り値をサポートします。
Exception support –例外をサポートします。
Order check support –メソッド呼び出しの順序のチェックをサポートします。
Annotation support –注釈を使用したモックの作成をサポートします。
次のコードスニペットについて考えてみます。
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.