導航:首頁 > 知識科普 > 怎麼mock父類的帶參數方法

怎麼mock父類的帶參數方法

發布時間:2024-12-18 22:29:35

如何在springMVC 中對REST服務使用mockmvc 做測試

spring 集成測試中 對mock 的集成實在是太棒了!但是使用請注意一下3個條件。

junit 必須使用4.9以上

同時您的框架必須是用spring mvc

spring 3.2以上才完美支持

目前使用spring MVC 取代struts2 的很多,spring MVC 的各種靈活讓人無比銷魂!所以使用spring MVC吧!

以前在對介面(主要是java服務端提供的介面(一般是:webService,restful))進行測試的中 一般用以下倆種方法。測試流程如圖:

這方法各種麻煩

2 使用Spring 提供的RestTemplate

錯誤不好跟蹤,必須開著伺服器

使用mockMVC都不是問題了看使用實例:

使用事例如下:父類

importorg.junit.runner.RunWith;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.test.context.ContextConfiguration;

importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;

importorg.springframework.test.context.web.WebAppConfiguration;

importorg.springframework.web.context.WebApplicationContext;

@WebAppConfiguration

@ContextConfiguration(locations={"classpath:applicationContext.xml",

"classpath:xxxx-servlet.xml"})

{

@Autowired

;

}

子類:

importorg.junit.Before;

importorg.junit.Test;

importorg.junit.runner.RunWith;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;

importorg.springframework.test.web.servlet.MockMvc;

importorg.springframework.test.web.servlet.setup.MockMvcBuilders;

importcom.conlect.oatos.dto.status.RESTurl;

importcom.qycloud.oatos.server.service.PersonalDiskService;

//這個必須使用junit4.9以上才有。

@RunWith(SpringJUnit4ClassRunner.class)

{

privatestaticStringURI=RESTurl.searchPersonalFile;

privateMockMvcmockMvc;

privateStringjson="{"entId":1234,"userId":1235,"key":"new"}";

@Autowired

;

@Before

publicvoidsetup(){

//this.mockMvc=webAppContextSetup(this.wac).alwaysExpect(status().isOk()).build();

this.mockMvc=MockMvcBuilders.standaloneSetup(personalDiskService).build();

}

@Test

publicvoidreadJson()throwsException{

this.mockMvc.perform(

post(URI,"json").characterEncoding("UTF-8")

.contentType(MediaType.APPLICATION_JSON)

.content(json.getBytes()))

.andExpect(content().string("ReadfromJSON:JavaBean{foo=[bar],fruit=[apple]}")

);

}

上面是簡單的例子,實際使用起來可以稍做修改。記得導入spring -test jar 包。無需額外配置(是不是很方便!)

當然和junit 的assert 一起用的話效果更好。下面貼點例子。就能跑。

Java代碼

packagecom.qycloud.oatos.server.test.mockmvcTest;

importstaticorg.junit.Assert.fail;

importstaticorg.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

importjava.io.UnsupportedEncodingException;

importjava.lang.reflect.Field;

importorg.springframework.test.web.servlet.MockMvc;

importcom.conlect.oatos.dto.status.CommConstants;

importcom.conlect.oatos.dto.status.ErrorType;

publicclassMockUtil{

/**

*mock

*

*@paramuri

*@paramjson

*@return

*@

*@throwsException

*/

publicstaticStringmock(MockMvcmvc,Stringuri,Stringjson)

,Exception{

returnmvc

.perform(

post(uri,"json").characterEncoding("UTF-8")

.contentType(MediaType.APPLICATION_JSON)

.content(json.getBytes())).andReturn()

.getResponse().getContentAsString();

}

/**

*

*@paramre返回值

*@paramobject要轉換的對象

*@paramtestName當前測試的對象

*/

publicstatic<T>voidcheck(Stringre,Class<T>object,StringtestName){

System.out.println(re);

if(ErrorType.error500.toString().equals(re)){

System.out.println("-----該介面測試失敗:-----"

+testName);

fail(re);

}elseif(CommConstants.OK_MARK.toString().equals(re)){

System.out.println("-----該介面測試成功:-----"

+testName);

}else{

System.out.println("-----re-----:"+re);

}

if(object!=null){

if(re.contains(":")){

try{

Tt=PojoMapper.fromJsonAsObject(re,object);

System.out.println("-----該介面測試成功:-----"

+testName);

}catch(Exceptione){

System.out.println("-----該介面測試失敗:-----"

+testName);

fail(e.getMessage());

}

}

}

}

/**

*初始化版本信息。每次調用測試用力之前首先更新版本信息

*@parammockMvc

*@paramurl

*@paramfileId

*@paramclass1

*@return

*@

*@throwsException

*/

publicstatic<T>LongupdateVersion(MockMvcmockMvc,Stringurl,

LongfileId,Class<T>class1),Exception{

Stringre=mock(mockMvc,url,fileId+"");

Tdto=PojoMapper.fromJsonAsObject(re,class1);

Longversion=Long.parseLong(dto.getClass().getMethod("getVersion").invoke(dto).toString());

System.out.println("version="+version);

returnversion;

}

}

使用如下:

Java代碼

@RunWith(SpringJUnit4ClassRunner.class)

{

privateMockMvcmockMvc;

privatestaticLongentId=1234L;

privatestaticLongadminId=1235L;

@Autowired

;

@Before

publicvoidsetup(){

this.mockMvc=MockMvcBuilders.standaloneSetup(personalDiskService)

.build();

}

/***

*pass

*全局搜索企業文件

*

*@throwsException

*/

@Test

publicvoidsearchPersonalFile()throwsException{

SearchFileParamDTOsf=newSearchFileParamDTO();

sf.setEntId(entId);

sf.setKey("li");

sf.setUserId(adminId);

Stringjson=PojoMapper.toJson(sf);

Stringre=MockUtil.mock(this.mockMvc,RESTurl.searchPersonalFile,

json);

MockUtil.check(re,SearchPersonalFilesDTO.class,"searchPersonalFile");

}

當然@setup裡面是每個@test執行時都會執行一次的,所以有些需要每次都實例化的參數可以放進來

如下:

Java代碼

@Autowired

;

@Before

publicvoidsetup(){

this.mockMvc=MockMvcBuilders.standaloneSetup(shareDiskService)

.build();

try{

initDatas();

}catch(Exceptione){

e.printStackTrace();

}

}

privatevoidinitDatas(),Exception{

FileIdVersion=MockUtil.updateVersion(mockMvc,RESTurl.getShareFileById,FileId,ShareFileDTO.class);

File2IdVersion=MockUtil.updateVersion(mockMvc,RESTurl.getShareFileById,File2Id,ShareFileDTO.class);

oldPicFolderVersion=MockUtil.updateVersion(mockMvc,RESTurl.getShareFolderById,oldPicFolderId,ShareFolderDTO.class);

}

ok!基本使用大致如此,代碼沒有些注釋,但是很簡單,看懂是沒問題的。權當拋磚引玉。希望大家加以指正!

閱讀全文

與怎麼mock父類的帶參數方法相關的資料

熱點內容
30分鍾笑容訓練方法 瀏覽:235
電腦提高軟體運行速度的方法 瀏覽:119
墩布頭製作方法視頻 瀏覽:375
補陽草功效及食用方法 瀏覽:130
opop手機怎麼截圖三種方法 瀏覽:375
檢查一下有沒有病變用什麼方法 瀏覽:699
農村瓷磚背景牆安裝方法 瀏覽:159
做蔥烙餅的方法和步驟 瀏覽:292
正鹽的鑒別方法 瀏覽:911
待機電流測量方法 瀏覽:1004
關於女巫的話讀後有什麼解決方法 瀏覽:336
傷脾胃有哪些方法 瀏覽:261
綠蘿花的種植方法 瀏覽:171
怎麼mock父類的帶參數方法 瀏覽:682
重復原則應該用哪種研究方法 瀏覽:707
格蘭仕烤箱烤使用方法 瀏覽:671
如何進入地鐵逃生的方法 瀏覽:346
手機鍵盤皮套使用方法 瀏覽:121
用毛線做星星的方法簡單 瀏覽:38
面膜密集使用方法 瀏覽:673