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

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

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