2.4 断言
对于需要测试的方法,用断言来判断其它执行结果是否正确。
assertEquals([Stringmessage],expected,actual)
message是个可选的消息,将会在发生错误时报告这个消息。
expected是期望值,通常都是用户指定的内容。
actual是被测试的代码返回的实际值。
如:
booleansuccess=update();
assertEquals(“更新是否成功”,true,success)
这样,当运行update()的返回值不为true的时候,这个单元测试会失败。
但有些时候,我们测试的方法并没有返回值,方法只是执行一个动作,那么这个时候,我们不能用判断的返回值来判断方法是否执行成功。
如新建文件的方法,publicvoidcreateFile(StringfilePath),这个时候,方法并没有返回值,我们在判断方法是否执行成功的时候,可以写一个辅助方法,来检查一下指定的文件是否新建成功了,以此来验证createFile()的准备性。如:
createFile(“d:/a.txt”);
booleanexist=fileExist(“d:/a.txt”);
assertEquals(“新建文件”,true,exist);
3、JMockit
当我们在编写单元测试的时候,常常会出现一些如调用的方法需要其它对象提供,而这个类现在又不具备,如很难创建、没有环境、没有开发完等情况,这个时候,我们需要用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环境,也不能初始化,而我们也不需要自己手动初始化ReadConfInfo,因为我们测试的重点不是ReadConfInfo,而是我们现有的功能。这个时候,我们可以用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中初始化,
/**
*初始化环境
*/
@BeforeClass
publicstaticvoidinit()throwsException{
//模拟ReadConfInfo
mockReadConfInfo();
}
这样,我们可以在程序中使用ReadConfInfo.getPropery()来完成我们的功能了。