EasyMock - ภาพรวม

Mocking คืออะไร?

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

EasyMock

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

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

  • 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 org.EasyMock.EasyMock;

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
      
        stocks = new ArrayList
       
        (); 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 = EasyMock.createMock(StockService.class); // mock the behavior of stock service to return the value of various stocks EasyMock.expect(stockServiceMock.getPrice(googleStock)).andReturn(50.00); EasyMock.expect(stockServiceMock.getPrice(microsoftStock)).andReturn(1000.00); EasyMock.replay(stockServiceMock); //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); } } 
       
      

Let's understand the important concepts of the above program. The complete code is available in the chapter First Application.

  • Portfolio – An object to carry a list of stocks and to get the market value computed using stock prices and stock quantity.

  • Stock – An object to carry the details of a stock such as its id, name, quantity, etc.

  • StockService – A stock service returns the current price of a stock.

  • EasyMock.createMock(...) – EasyMock created a mock of stock service.

  • EasyMock.expect(...).andReturn(...) – Mock implementation of getPrice method of stockService interface. For googleStock, return 50.00 as price.

  • EasyMock.replay(...) – EasyMock prepares the Mock object to be ready so that it can be used for testing.

  • portfolio.setStocks(...) – The portfolio now contains a list of two stocks.

  • portfolio.setStockService(...) - Assigns the stockService Mock object to the portfolio.

  • portfolio.getMarketValue() – The portfolio returns the market value based on its stocks using the mock stock service.