一、mock工具被广泛的应用于单测中,尤其是当测试环境系统依赖的外部项较多,而且不受控制时。
jmockit一般有2种方式:
一种是基于行为的方式,使用者在单测类中写 Expectations {{}}, 里面放置“预期”会被执行的代码段和返回,这就是一种“黑盒测试”
另一种是基于状态的方式,就是直接去重写想要mock的类中的方法,这是一种“白盒测试”,对于开发者来说,这种方式更简单有效
二、首先介绍下对于java系统类System的mock, 比如mock系统时间,常用的new Date()调用的还是System.currentTimeMillis()方法,mock这个就行
public class MockSystem extends MockUp<System> {
/**
* mock系统时间
*
* @return 自定义的系统时间
*/
@Mock
public long currentTimeMillis() {
return this.nowTime;
}
/**
* 系统时间
*/
Long nowTime;
/**
* 让调用方自定义系统时间
*
* @param nowTime 自定义系统时间
*/
public void setNowTime(Long nowTime) {
this.nowTime = nowTime;
}
}
代码中自定义了一个类,来继承System类,主要要写成:
自定义类 extends MockUp<需要被mock的类>
然后,重写currentTimeMillis()这个方法,返回系统变量nowTime, 具体的时间可以在单测中使用时自己设置
三、在任何一个单测中,如果要mock 系统时间,就在自己的单测执行之前,new 一个mock类就行,如下:
// mock 系统时间
MockSystem system = new MockSystem();
system.setNowTime(1415116800000L);
// 自己的单测执行
myUnitTest();