/** * 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 $$ * * 這個過程大體能夠劃分爲如下幾個步驟: * 一、使用 EasyMock 生成 Mock 對象 * 二、設定 Mock 對象的預期行爲和輸出 * 三、將 Mock 對象切換到 Replay 狀態 * 四、調用 Mock 對象方法進行單元測試 * 五、對 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); } }
EasyMockjava
一、添加EesyMock的maven依賴
<dependency>spring
<groupId>org.easymock</groupId>maven
<artifactId>easymock</artifactId>ide
<version>3.0</version>單元測試
<scope>test</scope>測試
</dependency>spa
二、使用 EasyMock 生成 Mock 對象對象
@BeforeClassit
public void initEasyMock(){io
trainTicketService = createMock(TrainTicketService. class );
}
三、設定 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); //結束錄製過程
}
四、調用 Mock 對象方法進行單元測試
doMock(businessDataRequest);
CommonResponse<List<BalanceTicketResponse>> respon = trainTicketService
.queryTrainTicket(businessDataRequest, null);
五、對 Mock 對象的行爲進行驗證
verify(trainTicketService); // 檢查 trainTicketService 是否如預期同樣調用了queryTrainTicket 方法。