Mockito - ภาพรวม

Mocking คืออะไร?

การล้อเลียนเป็นวิธีทดสอบการทำงานของคลาสที่แยกออกจากกัน การจำลองไม่จำเป็นต้องมีการเชื่อมต่อฐานข้อมูลหรือการอ่านไฟล์คุณสมบัติหรือการอ่านไฟล์เซิร์ฟเวอร์เพื่อทดสอบการทำงาน การจำลองวัตถุเป็นการล้อเลียนการให้บริการจริง วัตถุจำลองจะส่งคืนข้อมูลจำลองที่สอดคล้องกับข้อมูลจำลองที่ส่งผ่านไป

Mockito

Mockito อำนวยความสะดวกในการสร้างวัตถุจำลองอย่างราบรื่น ใช้ Java Reflection เพื่อสร้างวัตถุจำลองสำหรับอินเทอร์เฟซที่กำหนด วัตถุจำลองไม่ใช่เพียงพร็อกซีสำหรับการใช้งานจริง

พิจารณากรณีของ Stock Service ซึ่งส่งกลับรายละเอียดราคาของหุ้น ในระหว่างการพัฒนาไม่สามารถใช้บริการสต็อกจริงเพื่อรับข้อมูลแบบเรียลไทม์ได้ ดังนั้นเราจึงจำเป็นต้องใช้บริการสต็อกแบบจำลอง Mockito สามารถทำสิ่งเดียวกันได้อย่างง่ายดายตามชื่อของมัน

ประโยชน์ของ Mockito

  • No Handwriting - ไม่จำเป็นต้องเขียนวัตถุจำลองด้วยตัวคุณเอง

  • Refactoring Safe - การเปลี่ยนชื่อเมธอดของอินเทอร์เฟซหรือพารามิเตอร์การจัดลำดับใหม่จะไม่ทำลายโค้ดทดสอบเนื่องจาก Mocks ถูกสร้างขึ้นที่รันไทม์

  • 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(...)- จำลองการใช้เมธอด getPrice ของอินเทอร์เฟซ stockService สำหรับ googleStock ให้คืน 50.00 เป็นราคา

  • portfolio.setStocks(...) - ตอนนี้พอร์ตโฟลิโอมีรายชื่อหุ้นสองตัว

  • portfolio.setStockService(...) - กำหนดวัตถุ stockService Mock ให้กับพอร์ตโฟลิโอ

  • portfolio.getMarketValue() - ผลงานส่งคืนมูลค่าตลาดตามหุ้นโดยใช้บริการจำลองหุ้น