通过前面对MockUp介绍 ,使用,我们发现MockUp确实很强大。使用@Mock方法太直接了。
可是有时候 ,你只希望@Mock的方法当入参数满足特定条件下才走Mock逻辑,其它条件走老的逻辑。可以吗?
当然可以!看下面的例子:
import mockit.Invocation;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Assert;
import org.junit.Test;
import java.util.Calendar;
import java.util.Date;
//Mock方法中还可以调用老方法
public class InvocationMockUpTest {
@Test
public void testMockUp(){
//对Java自带类Calendar的get方法进行定制
new MockUp<Calendar>(Calendar.class){
//申明参数invocation,表示老方法的调用
@Mock
public int get(Invocation invocation, int unit){
//只希望时间是早上7点
if(unit == Calendar.HOUR_OF_DAY){
return 7;
}
return invocation.proceed(unit); //其他时间(年份,月份,日,分,秒均不变)
}
};
Calendar now = Calendar.getInstance(); //创建一个Calendar对象
Assert.assertTrue(now.get(Calendar.HOUR_OF_DAY )== 7); // 只有小时变成Mock方法
Assert.assertTrue(now.get(Calendar.MONTH) == (new Date()).getTime()); //其他的还是走老方法。
}
}