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() - ผลงานส่งคืนมูลค่าตลาดตามหุ้นโดยใช้บริการจำลองหุ้น