Mockito - Sekilas

Apa itu Mocking?

Mocking adalah cara untuk menguji fungsionalitas kelas secara terpisah. Mocking tidak memerlukan koneksi database atau membaca file properti atau membaca file server untuk menguji fungsionalitas. Objek Mock melakukan ejekan dari layanan nyata. Objek tiruan mengembalikan data dummy yang sesuai dengan beberapa input dummy yang diteruskan padanya.

Mockito

Mockito memfasilitasi pembuatan objek tiruan dengan mulus. Ini menggunakan Java Reflection untuk membuat objek tiruan untuk antarmuka tertentu. Objek tiruan hanyalah proxy untuk implementasi aktual.

Pertimbangkan kasus Stock Service yang mengembalikan rincian harga saham. Selama pengembangan, layanan stok aktual tidak dapat digunakan untuk mendapatkan data waktu nyata. Jadi kita membutuhkan implementasi dummy dari layanan stok. Mockito dapat melakukan hal yang sama dengan sangat mudah, seperti namanya.

Manfaat Mockito

  • No Handwriting - Tidak perlu menulis objek tiruan sendiri.

  • Refactoring Safe - Mengganti nama metode antarmuka atau menata ulang parameter tidak akan merusak kode pengujian karena Mock dibuat saat runtime.

  • Return value support - Mendukung nilai kembali.

  • Exception support - Mendukung pengecualian.

  • Order check support - Mendukung pemeriksaan urutan panggilan metode.

  • Annotation support - Mendukung pembuatan tiruan menggunakan anotasi.

Perhatikan cuplikan kode berikut.

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

Mari kita pahami konsep penting dari program di atas. Kode lengkap tersedia di bab ini First Application.

  • Portfolio - Sebuah objek untuk membawa daftar saham dan untuk mendapatkan nilai pasar yang dihitung menggunakan harga saham dan kuantitas saham.

  • Stock - Objek untuk membawa detail saham seperti id, nama, jumlah, dll.

  • StockService - Layanan saham mengembalikan harga saham saat ini.

  • mock(...) - Mockito membuat tiruan layanan stok.

  • when(...).thenReturn(...)- Implementasi tiruan dari metode getPrice antarmuka stockService. Untuk googleStock, kembalikan 50.00 sebagai harga.

  • portfolio.setStocks(...) - Portofolio sekarang berisi daftar dua saham.

  • portfolio.setStockService(...) - Menetapkan objek StockService Mock ke portofolio.

  • portfolio.getMarketValue() - Portofolio mengembalikan nilai pasar berdasarkan sahamnya menggunakan layanan saham tiruan.