pom.xmljava
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.1</version> <scope>test</scope> </dependency>
注意依賴scope設置爲test,項目打包將忽略test依賴。緩存
BizRefApi.java多線程
@Slf4j @RestController @RequestMapping("bizRefApi/") public class BizRefApi { /** * 業務處理接口 <br> */ @Resource private BizRefService bizRefService; /** * 業務緩存處理接口 <br> */ @Resource private BizRefCacheService bizRefCacheService; /** * Description: 新增業務關聯<br> * * @author xubin<br> * @taskId <br> * @param addBizRefReq 新增請求參數 * @param request HttpServletRequest * @return <br> */ @PostMapping(value = "/addBizRef") public String addBizRef(@RequestBody AddBizRefReq addBizRefReq, HttpServletRequest request) { try { ValidateUtil.validate(addBizRefReq); } catch (Exception e) { log.error("addBizRef fail, param : {}, exception : {}", addBizRefReq.toString(), e.getMessage()); return JsonUtil.getErrorJson(WebConstant.PARAM_EXCEPTION); } BizRefBO bizRefBO = new BizRefBO(); BeanUtils.copyProperties(addBizRefReq, bizRefBO); bizRefBO.setAppKey(request.getHeader(CommonConstant.APP_KEY)); bizRefService.save(bizRefBO); return JsonUtil.getSucc(WebConstant.OPER_SUCC); } /** * Description: 查詢單個設備對應業務模塊的關聯對象id<br> * * @author xubin<br> * @taskId <br> * @param queryBizIdReq 請求參數對象 * @param request HttpServletRequest * @return <br> */ @PostMapping(value = "/v2/queryBizIdSet") public String queryBizIdSet(@RequestBody QueryBizIdByDeviceCodeReq queryBizIdReq, HttpServletRequest request) { try { ValidateUtil.validate(queryBizIdReq); } catch (Exception e) { log.error("queryBizIdSet fail, param : {}, exception : {}", queryBizIdReq.toString(), e.getMessage()); return JsonUtil.getErrorJson(WebConstant.PARAM_EXCEPTION); } Set<String> resList = bizRefCacheService.queryBizIdByDeviceCode(request.getHeader(CommonConstant.APP_KEY), queryBizIdReq.getDeviceCode(), queryBizIdReq.getModuleCode()); return JsonUtil.getSucc4data(resList); } /** * set bizRefService * * @param bizRefService The bizRefService to set. <br> */ public void setBizRefService(BizRefService bizRefService) { this.bizRefService = bizRefService; } /** * set bizRefCacheService * * @param bizRefCacheService The bizRefCacheService to set. <br> */ public void setBizRefCacheService(BizRefCacheService bizRefCacheService) { this.bizRefCacheService = bizRefCacheService; }
實現類的具體機制不作贅述,此篇主要說下用EasyMock作單元測試,須要注意的是,在實現類裏須要對注入的對象(bizRefService 、bizRefCacheService )設置setter方法,用於後面執行單元測試。app
public class TestBizRefApi { /** * Description: 測試添加業務關聯<br> * * @author xubin<br> * @taskId <br> * <br> */ @Test public void testAddBizRef() { // 1.正常執行 //模擬vo請求參數 BizRefService bizRefServiceMock = EasyMock.createMock(BizRefService.class); HttpServletRequest requestMock = EasyMock.createMock(HttpServletRequest.class); bizRefApi.setBizRefService(bizRefServiceMock); // 被mock的方法無返回值(void),有返回值須要設置EasyMock.expect指望值 bizRefServiceMock.save(EasyMock.anyObject()); // 設置mock對象調用方法指望值 EasyMock.expect(requestMock.getHeader(CommonConstant.APP_KEY)).andReturn(""); // 激活mock對象 EasyMock.replay(bizRefServiceMock); EasyMock.replay(requestMock); // 執行目標測試方法 String resJsonStr = bizRefApi.addBizRef(addBizRefReq, requestMock); // 校驗執行結果 TestCase.assertEquals(WebConstant.OPER_SUCC, JSONObject.parseObject(resJsonStr).getJSONArray("resMsg").getJSONObject(0).getString("msgCode")); // 校驗mock對象執行狀態 EasyMock.verify(bizRefServiceMock, requestMock); // 2.出現參數異常 addBizRefReq = new AddBizRefReq(); // 重置mock對象,須要從新設置mock對象的參數時調用 // EasyMock.reset(bizRefServiceMock); // EasyMock.reset(requestMock); resJsonStr = bizRefApi.addBizRef(addBizRefReq, requestMock); TestCase.assertEquals(WebConstant.PARAM_EXCEPTION, JSONObject.parseObject(resJsonStr).getJSONArray("resMsg").getJSONObject(0).getString("msgCode")); EasyMock.verify(bizRefServiceMock, requestMock); } /** * Description: 測試根據設備編碼查詢業務id集合<br> * * @author xubin<br> * @taskId <br> * <br> */ @Test public void testQueryBizIdSet() { // 1.正常執行 QueryBizIdByDeviceCodeReq queryBizIdReq = new QueryBizIdByDeviceCodeReq(); queryBizIdReq.setDeviceCode("222"); queryBizIdReq.setModuleCode("faceset"); BizRefApi bizRefApi = new BizRefApi(); BizRefCacheService bizRefCacheServiceMock = EasyMock.createMock(BizRefCacheService.class); HttpServletRequest requestMock = EasyMock.createMock(HttpServletRequest.class); bizRefApi.setBizRefCacheService(bizRefCacheServiceMock); EasyMock.expect(requestMock.getHeader(CommonConstant.APP_KEY)).andReturn(""); Set<String> resSet = Sets.newHashSet(); resSet.add("1"); EasyMock.expect(bizRefCacheServiceMock.queryBizIdByDeviceCode(EasyMock.anyObject(), EasyMock.anyObject(), EasyMock.anyObject())) .andReturn(resSet); EasyMock.replay(bizRefCacheServiceMock); EasyMock.replay(requestMock); String resJsonStr = bizRefApi.queryBizIdSet(queryBizIdReq, requestMock); TestCase.assertEquals(1, JSONObject.parseObject(resJsonStr).getJSONArray("resData").size()); EasyMock.verify(bizRefCacheServiceMock, requestMock); // 2.出現參數異常 queryBizIdReq = new QueryBizIdByDeviceCodeReq(); resJsonStr = bizRefApi.queryBizIdSet(queryBizIdReq, requestMock); TestCase.assertEquals(WebConstant.PARAM_EXCEPTION, JSONObject.parseObject(resJsonStr).getJSONArray("resMsg").getJSONObject(0).getString("msgCode")); EasyMock.verify(bizRefCacheServiceMock, requestMock); }
經常使用到的EasyMock方法:
EasyMock.createMock:新建mock對象
EasyMock.expect(m).andReturn(v):設置m方法執行指望返回值爲v
EasyMock.expect(m).andThrow(Throwable throwable):設置m方法執行拋出異常
EasyMock.replay:激活mock對象
EasyMock.verify:校驗mock對象是否執行
EasyMock.reset:重置mock對象eclipse
筆者使用eclipse插件EclEmma查看單元測試覆蓋率單元測試