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的代碼中調(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容