Mockito-概要

モックとは何ですか?

モックは、クラスの機能を分離してテストする方法です。モックは、機能をテストするためにデータベース接続やプロパティファイルの読み取りまたはファイルサーバーの読み取りを必要としません。モックオブジェクトは、実際のサービスのモックを実行します。モックオブジェクトは、渡されたダミー入力に対応するダミーデータを返します。

モッキート

Mockitoは、モックオブジェクトのシームレスな作成を容易にします。特定のインターフェースのモックオブジェクトを作成するためにJavaReflectionを使用します。モックオブジェクトは、実際の実装のプロキシに他なりません。

株式の価格の詳細を返すストックサービスのケースを考えてみましょう。開発中は、実際のストックサービスを使用してリアルタイムデータを取得することはできません。したがって、ストックサービスのダミー実装が必要です。Mockitoは、その名前が示すように、同じことを非常に簡単に行うことができます。

Mockitoの利点

  • 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 static org.mockito.Mockito.*;

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<Stock> stocks = new ArrayList<Stock>();
      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 = mock(StockService.class);

      // mock the behavior of stock service to return the value of various stocks
      when(stockServiceMock.getPrice(googleStock)).thenReturn(50.00);
      when(stockServiceMock.getPrice(microsoftStock)).thenReturn(1000.00);

      //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);
   }
}

上記のプログラムの重要な概念を理解しましょう。完全なコードはこの章にありますFirst Application

  • Portfolio −株式のリストを保持し、株価と在庫数量を使用して計算された市場価値を取得するオブジェクト。

  • Stock − ID、名前、数量など、株式の詳細を運ぶオブジェクト。

  • StockService −株式サービスは、株式の現在の価格を返します。

  • mock(...) −Mockitoはストックサービスのモックを作成しました。

  • when(...).thenReturn(...)−stockServiceインターフェースのgetPriceメソッドのモック実装。googleStockの場合、価格として50.00を返します。

  • portfolio.setStocks(...) −ポートフォリオに2つの株式のリストが含まれるようになりました。

  • portfolio.setStockService(...) − stockServiceMockオブジェクトをポートフォリオに割り当てます。

  • portfolio.getMarketValue() −ポートフォリオは、模擬株式サービスを使用して、その株式に基づいて市場価値を返します。