2.4 斷言
對(duì)于需要測(cè)試的方法,用斷言來(lái)判斷其它執(zhí)行結(jié)果是否正確。
assertEquals([Stringmessage],expected,actual)
message是個(gè)可選的消息,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。
expected是期望值,通常都是用戶指定的內(nèi)容。
actual是被測(cè)試的代碼返回的實(shí)際值。
如:
booleansuccess=update();
assertEquals(“更新是否成功”,true,success)
這樣,當(dāng)運(yùn)行update()的返回值不為true的時(shí)候,這個(gè)單元測(cè)試會(huì)失敗。
但有些時(shí)候,我們測(cè)試的方法并沒有返回值,方法只是執(zhí)行一個(gè)動(dòng)作,那么這個(gè)時(shí)候,我們不能用判斷的返回值來(lái)判斷方法是否執(zhí)行成功。
如新建文件的方法,publicvoidcreateFile(StringfilePath),這個(gè)時(shí)候,方法并沒有返回值,我們?cè)谂袛喾椒ㄊ欠駡?zhí)行成功的時(shí)候,可以寫一個(gè)輔助方法,來(lái)檢查一下指定的文件是否新建成功了,以此來(lái)驗(yàn)證createFile()的準(zhǔn)備性。如:
createFile(“d:/a.txt”);
booleanexist=fileExist(“d:/a.txt”);
assertEquals(“新建文件”,true,exist);
3、JMockit
當(dāng)我們?cè)诰帉憜卧獪y(cè)試的時(shí)候,常常會(huì)出現(xiàn)一些如調(diào)用的方法需要其它對(duì)象提供,而這個(gè)類現(xiàn)在又不具備,如很難創(chuàng)建、沒有環(huán)境、沒有開發(fā)完等情況,這個(gè)時(shí)候,我們需要用JMockit模擬出一個(gè)類,來(lái)滿足我們的需求,來(lái)完成我們核心功能的測(cè)試。
3.1 pom中增加JMockit的依賴
<dependency>
<groupId>jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
3.2 模擬對(duì)象
如需要測(cè)試的一個(gè)方法的一個(gè)值是配置在misInitConfig.xml中的,而misInitConfig.xml中的值需要用ReadConfInfo.getPropery()來(lái)獲取,而ReadConfInfo是在應(yīng)用啟動(dòng)時(shí)初始化的,這個(gè)時(shí)候并沒有web環(huán)境,也不能初始化,而我們也不需要自己手動(dòng)初始化ReadConfInfo,因?yàn)槲覀儨y(cè)試的重點(diǎn)不是ReadConfInfo,而是我們現(xiàn)有的功能。這個(gè)時(shí)候,我們可以用JMockit模塊出ReadConfInfo,來(lái)完成此功能的測(cè)試。
/**
*模擬ReadConfInfo
*/
publicstaticvoidmockReadConfInfo(){
newMockUp<ReadConfInfo>(){
@Mock
publicStringgetPropery(StringpropertyName){
if("conf_loglevel".equals(propertyName)){
return"debug";
}elseif("conf_logfolder".equals(propertyName)){
return"log";
}else{
return"";
}
}
}
}
在單元測(cè)試的@BeforCalss中初始化,
/**
*初始化環(huán)境
*/
@BeforeClass
publicstaticvoidinit()throwsException{
//模擬ReadConfInfo
mockReadConfInfo();
}
這樣,我們可以在程序中使用ReadConfInfo.getPropery()來(lái)完成我們的功能了。