EasyMock使用說明

/**
 * Bestpay.com.cn Inc.
 * Copyright (c) 2011-2016 All Rights Reserved.
 */
package com.bestpay.bpbp.bill.core.coreService;

import com.bestpay.bpbp.bill.core.base.BaseSpringTest;
import com.bestpay.bpbp.bill.core.facade.dto.core.BaseCoreResult;
import com.bestpay.bpbp.bill.core.facade.dto.core.request.QueryOrderRequest;
import com.bestpay.bpbp.bill.core.facade.dto.core.request.QueryRefundRequest;
import com.bestpay.bpbp.bill.core.service.service.QueryOrderService;
import com.bestpay.bpbp.common.context.OperationContext;
import lombok.extern.slf4j.Slf4j;
import org.easymock.EasyMock;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;

import static org.easymock.EasyMock.*;

/**
 * EasyMock使用案例
 * @author lwh
 * @version Id: QueryOrderServiceMockTest.java, v 0.1 2016/02/16 15:32 lwh Exp $$
 *
 * 這個過程大致可以劃分爲以下幾個步驟:
 *      1、使用 EasyMock 生成 Mock 對象
 *      2、設定 Mock 對象的預期行爲和輸出
 *      3、將 Mock 對象切換到 Replay 狀態
 *      4、調用 Mock 對象方法進行單元測試
 *      5、對 Mock 對象的行爲進行驗證
 */


@Slf4j
public class QueryOrderServiceMockTest extends BaseSpringTest {

    @Autowired
    private static QueryOrderService queryOrderService;

    @BeforeClass
    public static void initEasyMock(){
        queryOrderService  =  createMock(QueryOrderService. class );
        System.out.println(queryOrderService.toString());
        System.out.println("-------------------");
    }
    //設定 Mock 對象的預期行爲和輸出
    public  void doMock(){
        BaseCoreResult res = new BaseCoreResult();
        reset(queryOrderService); // 重置mock對象
        expect(queryOrderService.queryBpbpOrder(EasyMock.anyObject(QueryOrderRequest.class),EasyMock.anyObject(OperationContext.class))).andReturn(res); // (b)
        replay(queryOrderService); //結束錄製過程,將 Mock 對象切換到 Replay 狀態
    }

    /**
     * 查詢銷賬單
     */
    @Test
    public void testQueryBpbpOrder(){
        doMock();//調用 Mock 對象方法進行單元測試
        OperationContext operationContext = new OperationContext();
        operationContext.setTime(new Date());
        operationContext.setAppIp("123.213.123.132");
        operationContext.setAppName("ticketApp");
        QueryOrderRequest queryOrderCoreRequest = new QueryOrderRequest();
        queryOrderCoreRequest.setBpbpOrderNo("2015112812413210033820");
        queryOrderCoreRequest.setUserAccount("15813350170");
        queryOrderCoreRequest.setBizType("TRAIN_TICKET");
        queryOrderCoreRequest.setChannelType("CLIENT");
        queryOrderCoreRequest.setPhoneNo("15626252388");
        queryOrderCoreRequest.setRequestId("123456");
        queryOrderCoreRequest.setSupplierCode("tn");
        BaseCoreResult baseCoreResult = queryOrderService.queryBpbpOrder(queryOrderCoreRequest,operationContext);
        verify(queryOrderService); // 檢查 trainTicketService 是否如預期一樣調用了 queryTrainTicket 方法。對 Mock 對象的行爲進行驗證
        log.info("baseCoreResult:{}",baseCoreResult);

    }

}

EasyMock

   1、添加EesyMock的maven依賴
        <dependency>

            <groupId>org.easymock</groupId>

            <artifactId>easymock</artifactId>

            <version>3.0</version>

            <scope>test</scope>

        </dependency>

    2、使用 EasyMock 生成 Mock 對象

    

    @BeforeClass

    public  void initEasyMock(){

        trainTicketService  =  createMock(TrainTicketService. class );

    }

    3、設定 Mock 對象的預期行爲和輸出

    public  void doMock(BusinessDataRequest businessDataRequest){

        CommonResponse<List<BalanceTicketResponse>> res = new CommonResponse<List<BalanceTicketResponse>>();

        res.setRespCode("039999");

        res.setRespDesc("certificateTypeName字段不能爲空");

        res.setResult(null);

        reset(trainTicketService); // 重置mock對象

        expect(trainTicketService.queryTrainTicket(businessDataRequest, null)).andReturn(res); // (b)

        replay(trainTicketService); //結束錄製過程

    }

    4、調用 Mock 對象方法進行單元測試

        doMock(businessDataRequest);

        CommonResponse<List<BalanceTicketResponse>> respon = trainTicketService

                .queryTrainTicket(businessDataRequest, null);

      5、對 Mock 對象的行爲進行驗證

         verify(trainTicketService); // 檢查 trainTicketService 是否如預期一樣調用了queryTrainTicket 方法。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章