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