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