您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUnit測(cè)試私有方法(protected方法類同)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/11/18 11:21:20 ] 推薦標(biāo)簽:單元測(cè)試工具 軟件測(cè)試工具

  注意到,我們?cè)谥氨粶y(cè)試的方法都是共有的...其實(shí)算是protected修飾的方法我們也可以通過在同一個(gè)包下面建測(cè)試類來測(cè)試的.但是,現(xiàn) 在我們有一個(gè)需求,是要測(cè)試私有的方法....按照我們之前的辦法,創(chuàng)建被測(cè)試類的對(duì)象顯然已經(jīng)不能實(shí)現(xiàn)了.因?yàn)閷?duì)象不能調(diào)用類里面私有的方法...還 有一種解決辦法,是先將這個(gè)方法改成public,測(cè)試結(jié)束以后再改回private .但是,有一點(diǎn)必須記住.
  不能為了測(cè)試而修改javascript:;" onClick="javascript:tagshow(event, '源代碼');" target="_self">源代碼,除非是通過測(cè)試發(fā)現(xiàn)了BUG
  在這里,我們通過反射來解決這個(gè)問題...
  放上來例子..
  被測(cè)試?yán)?.簡(jiǎn)單的不能再簡(jiǎn)單了
  package com.test.junit3;
  public class calcutate2 {
  private int add(int a, int b) {
  return a + b;
  }
  }
  測(cè)試類
  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方法,因?yàn)檫@個(gè)方法只能獲取public修飾的方法..
  method.setAccessible(true);//這個(gè)設(shè)置為true.可以無(wú)視java的封裝..不設(shè)置這個(gè)也無(wú)法或者這個(gè)Method
  Object result = method.invoke(cal, new Object[]{1,10});
  Assert.assertEquals(11, result);//這里自定拆箱..
  }
  catch (Exception e)
  {
  e.printStackTrace();
  }
  }
  }

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd