Mockito - Tổng quan
Chế giễu là gì?
Chế nhạo là một cách để kiểm tra chức năng của một lớp một cách riêng biệt. Chế độ giả không yêu cầu kết nối cơ sở dữ liệu hoặc đọc tệp thuộc tính hoặc đọc máy chủ tệp để kiểm tra chức năng. Các đối tượng giả mạo thực hiện việc chế nhạo dịch vụ thực. Một đối tượng giả trả về một dữ liệu giả tương ứng với một số đầu vào giả được chuyển cho nó.
Mockito
Mockito tạo điều kiện cho việc tạo các đối tượng giả một cách liền mạch. Nó sử dụng Java Reflection để tạo các đối tượng giả cho một giao diện nhất định. Đối tượng giả mạo không là gì ngoài proxy cho các triển khai thực tế.
Hãy xem xét một trường hợp của Dịch vụ Chứng khoán trả về chi tiết giá của một cổ phiếu. Trong quá trình phát triển, không thể sử dụng dịch vụ chứng khoán thực tế để lấy dữ liệu thời gian thực. Vì vậy, chúng tôi cần một triển khai giả của dịch vụ chứng khoán. Mockito có thể làm điều tương tự rất dễ dàng, như tên gọi của nó.
Lợi ích của Mockito
No Handwriting - Không cần phải viết các đối tượng giả của riêng bạn.
Refactoring Safe - Đổi tên tên phương thức giao diện hoặc sắp xếp lại các tham số sẽ không phá vỡ mã kiểm tra vì Mocks được tạo trong thời gian chạy.
Return value support - Hỗ trợ giá trị trả về.
Exception support - Hỗ trợ các trường hợp ngoại lệ.
Order check support - Hỗ trợ kiểm tra thứ tự của các cuộc gọi phương thức.
Annotation support - Hỗ trợ tạo chế độ giả bằng chú thích.
Hãy xem xét đoạn mã sau.
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);
}
}
Chúng ta hãy hiểu các khái niệm quan trọng của chương trình trên. Mã hoàn chỉnh có sẵn trong chươngFirst Application.
Portfolio - Đối tượng để ghi danh sách cổ phiếu và tính giá trị thị trường bằng cách sử dụng giá cổ phiếu và số lượng cổ phiếu.
Stock - Một đối tượng để mang các thông tin chi tiết của cổ phiếu như id, tên, số lượng, v.v.
StockService - Một dịch vụ cổ phiếu trả về giá hiện tại của một cổ phiếu.
mock(...) - Mockito đã tạo ra một bản mô phỏng dịch vụ chứng khoán.
when(...).thenReturn(...)- Mô phỏng thực hiện phương thức getPrice của giao diện stockService. Đối với googleStock, trả lại 50,00 như giá.
portfolio.setStocks(...) - Danh mục đầu tư hiện có danh sách hai cổ phiếu.
portfolio.setStockService(...) - Gán đối tượng stockService Mock vào danh mục đầu tư.
portfolio.getMarketValue() - Danh mục đầu tư trả lại giá trị thị trường dựa trên cổ phiếu của nó bằng cách sử dụng dịch vụ chứng khoán giả.