JUnit測試私有方法(protected方法類同)


注意到,我們在之前被測試的方法都是共有的...其實就算是protected修飾的方法我們也可以通過在同一個包下面建測試類來測試的.但是,現 在我們有一個需求,就是要測試私有的方法....按照我們之前的辦法,創建被測試類的對象顯然已經不能實現了.因為對象不能調用類里面私有的方法...還 有一種解決辦法,就是先將這個方法改成public,測試結束以后再改回private .但是,有一點必須記住.

絕對不能為了測試而修改源代碼,除非是通過測試發現了BUG

在這里,我們通過反射來解決這個問題...

放上來例子..

被測試例子..簡單的不能再簡單了

package com.test.junit3;

 

public class calcutate2 {

 private int add(int a, int b) {

  return a + b;

 }

}

測試類

package com.test.junit3;

import org.junit.Assert;

import java.lang.reflect.Method;

import org.junit.Test;

 

public class privateTest {

 @Test
 @SuppressWarnings("unchecked")
 public void testAdd()
 {
  calcutate2 cal = new calcutate2();
  
  Class c = calcutate2.class;//獲得class類
  
  try
  {
   Method method = c.getDeclaredMethod("add", new Class[]{int.class,int.class});//獲得method.注意,這里不能使用getMethod方法,因為這個方法只能獲取public修飾的方法..
   method.setAccessible(true);//這個設置為true.可以無視java的封裝..不設置這個也無法或者這個Method
   Object result = method.invoke(cal, new Object[]{1,10});
   Assert.assertEquals(11, result);//這里自定拆箱..
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM