JMockit同一个类中Mock方法和跨类mock方法
public class A
{
public int fun()
{
return 1;
}
}
public class B
{
public int f2()
{
int r = new A().fun();
r++;
return r;
}
}
@RunWith(JMockit.class)
public class BTest
{
//类B的方法f2的代码中调用了类A的方法fun,假设在对类B的方法f2做单元测试时,
//已经知道了类A的方法fun是绝对正确的,或者说类A的方法fun不太好调用,
//这时使用下面的方法即可将类B的方法f2中调用fun的返回值mock掉
@Test
public void testF2(@Mocked final A a) //参数不可少,final修饰
{
new Expectations()
{
//给a.fun()一个模拟的返回值
{
a.fun();
result = 100;
}
};
int x = a.fun();
System.out.println(x); //100
B b = new B();
int y = b.f2();
System.out.println(y); //正常的b.f2应该返回2,这里经过mock以后,返回101
}
//类B的方法f3的代码中调用了类B的方法f1,假设在对类B的方法f3做单元测试时,
//已经知道了类B的方法f1是绝对正确的,或者说类B的方法f1不太好调用(如被private修饰),
//这时使用下面的方法即可将类B的方法f3中调用f1的返回值mock掉
@Test
public void testF3()
{
final B b = new B();
new Expectations(b) //这里的b不能少
{
//给b.f1()一个模拟的返回值
{
b.f1();
result = 200;
}
};
int y = b.f3();
System.out.println("########################");
System.out.println(y);//正常的b.f3应该返回3,这里经过mock以后,返回201
}
}
输出
100
101
########################
201