java代碼mock java代碼模糊查詢

mock java 干什么用的

在單元測(cè)試中,經(jīng)常需要進(jìn)行一些mock操作?,F(xiàn)在已經(jīng)有了一些比較不錯(cuò)的框架在做這些事情,比如:EasyMck,他在大多數(shù)情況下運(yùn)行良好,但是對(duì)于某些結(jié)構(gòu)的設(shè)計(jì)卻顯得無(wú)能為力。

成都創(chuàng)新互聯(lián)公司主營(yíng)社旗網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),社旗h5成都微信小程序搭建,社旗網(wǎng)站營(yíng)銷推廣歡迎社旗等地區(qū)企業(yè)咨詢

EasyMock等眾多的mock框架僅能mock一些public,non static or final的方法,在大多數(shù)情況下這并沒(méi)有什么問(wèn)題,他可以處理大多數(shù)的問(wèn)題,但是當(dāng)測(cè)試的代碼包含了一些靜態(tài)方法。

Cactus是一個(gè)基于JUnit框架的簡(jiǎn)單測(cè)試框架,用來(lái)單元測(cè)試服務(wù)端Java代碼。Cactus框架的主要目標(biāo)是能夠單元測(cè)試服務(wù)端的使用Servlet對(duì)象的Java方法如HttpServletRequest,

都是單元測(cè)試的框架。例如你寫了一個(gè)程序 在功能測(cè)試也就是整體測(cè)試前 想知道它的對(duì)錯(cuò)就可以借用這些工具寫個(gè)單元測(cè)試案例 單獨(dú)測(cè)試這個(gè)類 或者某部分程序?qū)﹀e(cuò)

java 如何mock參數(shù)

package?cn.outofmemory.junit.jmockit;

import?mockit.NonStrictExpectations;

import?mockit.Injectable;

import?mockit.MockUp;

import?mockit.Mocked;

import?mockit.Mockit;

import?mockit.NonStrict;

import?mockit.Tested;

public?class?MockTargetTest?{

@BeforeClass

static?public?void?beforeClass()?{

Mockit.setUpMocks();

}

@Mocked

private?MockTarget?mt;

@Test

public?void?testPrivateMethodMock()?{???????

new?NonStrictExpectations(mt)?{

{

//?對(duì)私有方法進(jìn)行mock??

this.invoke(mt,?"privateMethod",?anyString);??

result?=?"Hello?Object";??

}

};

Object?actual?=?mt.publicMethod();

assertEquals(actual,"Hello?Object");

}

}

如何對(duì)Java單例模式進(jìn)行mock

JAVA單例模式的幾種實(shí)現(xiàn)方法餓漢式單例類packagepattern.singleton;//餓漢式單例類.在類初始化時(shí),已經(jīng)自行實(shí)例化publicclassSingleton1{//私有的默認(rèn)構(gòu)造子privateSingleton1(){}//已經(jīng)自行實(shí)例化privatestaticfinalSingleton1single=newSingleton1();//靜態(tài)工廠方法publicstaticSingleton1getInstance(){returnsingle;}}2.懶漢式單例類packagepattern.singleton;//懶漢式單例類.在第一次調(diào)用的時(shí)候?qū)嵗痯ublicclassSingleton2{//私有的默認(rèn)構(gòu)造子privateSingleton2(){}//注意,這里沒(méi)有finalprivatestaticSingleton2single;//只實(shí)例化一次static{single=newSingleton2();}//靜態(tài)工廠方法publicsynchronizedstaticSingleton2getInstance(){if(single==null){single=newSingleton2();}returnsingle;}}在上面給出懶漢式單例類實(shí)現(xiàn)里對(duì)靜態(tài)工廠方法使用了同步化,以處理多線程環(huán)境。有些設(shè)計(jì)師在這里建議使用所謂的"雙重檢查成例".必須指出的是,"雙重檢查成例"不可以在Java語(yǔ)言中使用。不十分熟悉的讀者,可以看看后面給出的小節(jié)。同樣,由于構(gòu)造子是私有的,因此,此類不能被繼承。餓漢式單例類在自己被加載時(shí)就將自己實(shí)例化。即便加載器是靜態(tài)的,在餓漢式單例類被加載時(shí)仍會(huì)將自己實(shí)例化。單從資源利用效率角度來(lái)講,這個(gè)比懶漢式單例類稍差些。從速度和反應(yīng)時(shí)間角度來(lái)講,則比懶漢式單例類稍好些。然而,懶漢式單例類在實(shí)例化時(shí),必須處理好在多個(gè)線程同時(shí)首次引用此類時(shí)的訪問(wèn)限制問(wèn)題,特別是當(dāng)單例類作為資源控制器,在實(shí)例化時(shí)必然涉及資源初始化,而資源初始化很有可能耗費(fèi)時(shí)間。這意味著出現(xiàn)多線程同時(shí)首次引用此類的機(jī)率變得較大。餓漢式單例類可以在Java語(yǔ)言內(nèi)實(shí)現(xiàn),但不易在C++內(nèi)實(shí)現(xiàn),因?yàn)殪o態(tài)初始化在C++里沒(méi)有固定的順序,因而靜態(tài)的m_instance變量的初始化與類的加載順序沒(méi)有保證,可能會(huì)出問(wèn)題。這就是為什么GoF在提出單例類的概念時(shí),舉的例子是懶漢式的。他們的書影響之大,以致Java語(yǔ)言中單例類的例子也大多是懶漢式的。實(shí)際上,本書認(rèn)為餓漢式單例類更符合Java語(yǔ)言本身的特點(diǎn)。3.登記式單例類.packagepattern.singleton;importjava.util.HashMap;importjava.util.Map;//登記式單例類.//類似Spring里面的方法,將類名注冊(cè),下次從里面直接獲取。publicclassSingleton3{privatestaticMapmap=newHashMap();static{Singleton3single=newSingleton3();map.put(single.getClass().getName(),single);}//保護(hù)的默認(rèn)構(gòu)造子protectedSingleton3(){}//靜態(tài)工廠方法,返還此類惟一的實(shí)例publicstaticSingleton3getInstance(Stringname){if(name==null){name=Singleton3.class.getName();System.out.println("name==null"+"---name="+name);}if(map.get(name)==null){try{map.put(name,(Singleton3)Class.forName(name).newInstance());}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}}returnmap.get(name);}//一個(gè)示意性的商業(yè)方法publicStringabout(){return"Hello,IamRegSingleton.";}publicstaticvoidmain(String[]args){Singleton3single3=Singleton3.getInstance(null);System.out.println(single3.about());}}

接口自動(dòng)化測(cè)試之Mock

Mock介紹

1.找到要替換的對(duì)象:我們需要測(cè)試的是visit_ustack這個(gè)函數(shù),那么我們需要替換掉send_request這個(gè)函數(shù)。

2.實(shí)例化Mock類得到一個(gè)mock對(duì)象,并且設(shè)置這個(gè)mock對(duì)象的行為。在成功測(cè)試中,我們?cè)O(shè)置mock對(duì)象的返回值為字符串“200”,在失敗測(cè)試中,我們?cè)O(shè)置mock對(duì)象的返回值為字符串"404"。

3.使用這個(gè)mock對(duì)象替換掉我們想替換的對(duì)象。我們替換掉了client.send_request

4.寫測(cè)試代碼。我們調(diào)用client.visit_ustack(),并且期望它的返回值和我們預(yù)設(shè)的一樣。

上面這個(gè)就是使用mock對(duì)象的基本步驟了。在上面的例子中我們替換了自己寫的模塊的對(duì)象,其實(shí)也可以替換標(biāo)準(zhǔn)庫(kù)和第三方模塊的對(duì)象,方法是一樣的:先import進(jìn)來(lái),然后替換掉指定的對(duì)象就可以了。

Mockrunner用在J2EE環(huán)境中進(jìn)行應(yīng)用程序的模擬測(cè)試。它不僅支持Struts actions,servlets,過(guò)濾器和標(biāo)簽類,還包括一個(gè)JDBC和一個(gè)JMS測(cè)試框架,可以用于測(cè)試基于EJB的應(yīng)用程序。

Mockrunner擴(kuò)展了JUnit并模擬了必要的行為,而無(wú)需調(diào)用實(shí)際的基礎(chǔ)結(jié)構(gòu)。它不需要正在運(yùn)行的應(yīng)用程序服務(wù)器或數(shù)據(jù)庫(kù)。此外,它不會(huì)調(diào)用web容器或Struts ActionServlet。它非??焖?,使用戶可以在測(cè)試的所有步驟中操縱所有涉及的類和模擬對(duì)象。它可以用于為基于J2EE的應(yīng)用程序編寫非常復(fù)雜的單元測(cè)試,而不會(huì)產(chǎn)生任何開銷。Mockrunner不支持任何類型的容器內(nèi)測(cè)試。

Mockrunner不會(huì)讀取任何配置文件,例如web.xml或struts-config.xml。您可以使用Mockrunner API指定所有參數(shù)。因此,可以將servlet,過(guò)濾器,標(biāo)簽和Struts動(dòng)作作為可重用組件進(jìn)行測(cè)試,而不管您在一個(gè)或另一個(gè)應(yīng)用程序中使用的設(shè)置如何。無(wú)法測(cè)試配置文件中的定義。如果要這樣做,可以將StrutsTestCase用于基于Struts的應(yīng)用程序或Cactus。

Mockrunner支持Java版本從1.3到1.6以及J2EE 1.3,J2EE 1.4和JavaEE5。尚不支持EJB 3.0。Mockrunner支持Struts版本1.1、1.2和1.3。

下載地址:Mockrunner download | SourceForge.net

最后:【可能給你帶來(lái)幫助的教程】軟件測(cè)試最新自學(xué)教程

網(wǎng)站名稱:java代碼mock java代碼模糊查詢
網(wǎng)站地址:http://muchs.cn/article12/doeeddc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站收錄微信小程序、電子商務(wù)用戶體驗(yàn)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司