java反射運用舉例-junit測試私人方法

來源:互聯網
上載者:User
       記得以前剛接觸junit那會,對於公有方法的測試運用的很是流暢,並且私人方法也是在這些公有方法中調用,都會測試覆蓋到。

由於是建立的類,建立的方法,造資料一步一步的覆蓋跑下去,確實只要有耐心,都可以搞定。

但是隨著項目的逐漸深入,由於人員成本,時間成本等等問題,測試類別的維護不知道從哪一個版本,

哪一位開發人員修改了商務邏輯開始,已經問題百出,一線飄紅了,但是項目一直跑著也沒出現什麼問題[運氣不錯],

而且時間成本等問題一直存在,但是在這時你只是修改了私人方法的一部分邏輯,但是測試類別你這次又必須得維護,

所以有兩點必須解決:

1.把原有的測試case按照現有的邏輯把【主體】調通。

2.測試自己修改過的私人方法商務邏輯。

關於第一點沒啥捷徑,根據主邏輯調通。

關於第二點可以修改私人方法的修飾符,但是這種方式需要改動代碼,所以不太靠譜,建議不要使用。

此處介紹通過反射來測試私人方法,方便實用。也能深刻體驗一下反射的好處。


// 待測試的私人方法類
public class MethodClass
{
    private int add(int a, int b)
    {
        return a + b;
    }
}

// junit測試類別
public class MethodClassTest extends TestCase
{
    public void testAdd()
    {
        MethodClass mc = new MethodClass();

        // 得到class對象
        Class<MethodClass> clazz = MethodClass.class;


        // 得到方法
        try
        {
            Method method = clazz.getDeclaredMethod("add", new Class[] {int.class, int.class });// 這裡也可以用:Integer.TYPE

            method.setAccessible(true);// 抑制存取修飾詞,使得私人方法變為可以訪問的

            Object result = method.invoke(mc, new Object[] { 2, 3 });

            Assert.assertEquals(5, result);
        }
        catch (Exception e)
        {
            e.printStackTrace();

            Assert.fail();
        }
    }
}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.