2019-01-19

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

你可能感兴趣的:(2019-01-19)