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的代碼中調(diào)用了類A的方法fun,假設(shè)在對類B的方法f2做單元測試時,
//已經(jīng)知道了類A的方法fun是絕對正確的,或者說類A的方法fun不太好調(diào)用,
//這時使用下面的方法即可將類B的方法f2中調(diào)用fun的返回值mock掉
@Test
public void testF2(@Mocked final A a) //參數(shù)不可少,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應(yīng)該返回2,這里經(jīng)過mock以后,返回101
}
//類B的方法f3的代碼中調(diào)用了類B的方法f1,假設(shè)在對類B的方法f3做單元測試時,
//已經(jīng)知道了類B的方法f1是絕對正確的,或者說類B的方法f1不太好調(diào)用(如被private修飾),
//這時使用下面的方法即可將類B的方法f3中調(diào)用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應(yīng)該返回3,這里經(jīng)過mock以后,返回201
}
}
輸出
100
101
########################
201