JUnit 3.8 通过反射测试私有方法

开发 后端
本文演示了JUnit测试私有的两种方法,第一是通过把目标类的私有方法,第二是通过反射。详细请看下文。

测试私有(private)的方法有两种:

1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳

2)通过反射 (推荐)

 

代码演示:

 

目标程序

PrivateMethod.java

  1. package com.junit3_8;  
  2.  
  3. public class PrivateMethod {  
  4.     //私有方法  
  5.     private int add(int a, int b)  
  6.     {         
  7.         return a +b ;  
  8.           
  9.     }  
  10.  
  11. }  

测试程序

PrivateMethodTest.java

  1. package com.junit3_8;  
  2.  
  3. import java.lang.reflect.Method;  
  4.  
  5. import junit.framework.Assert;  
  6. import junit.framework.TestCase;  
  7.  
  8. /**  
  9.  * 通过反射测试私有方法,  
  10.  *   
  11.  */ 
  12. public class PrivateMethodTest extends TestCase {  
  13.       
  14.     public void testAdd() throws Exception  
  15.     {  
  16.         //PrivateMethod pm = new PrivateMethod();  
  17.         //获取目标类的class对象  
  18.         Class<PrivateMethod> class1 = PrivateMethod.class;  
  19.           
  20.         //获取目标类的实例  
  21.         Object instance = class1.newInstance();  
  22.           
  23.         //getDeclaredMethod()  可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。  
  24.         //getMethod() 只可获取公共的方法  
  25.         Method method = class1.getDeclaredMethod("add"new Class[]{int.class,int.class});  
  26.           
  27.         //值为true时 反射的对象在使用时 应让一切已有的访问权限取消  
  28.         method.setAccessible(true);  
  29.           
  30.         Object result = method.invoke(instance, new Object[]{1,2});  
  31.           
  32.         Assert.assertEquals(3, result);  
  33.           
  34.       
  35.     }  
  36.  
  37. }  

小 结:

getDeclaredMethod() 可获取 公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

getMethod() 只可获取公共的方法

  1. Method method = class1.getDeclaredMethod("add", new Class[]{int.class,int.class}); 

等价于

  1. Method method = class1.getDeclaredMethod("add"new Class[]{Integer.TYPE,int.Integer.TYPE}); 

因为 Integer.TYPE 表示基本类型 int 的 Class 实例。

原文连接:http://blog.csdn.net/hzc543806053/article/details/7340546

【编辑推荐】

  1. 探究Java初始化的过程
  2. 如何系统地学习JavaScript
  3. Java集合框架的知识总结
  4. Java与F#的并行程序处理对比
  5. Java并发编程之同步互斥问题
责任编辑:林师授 来源: hzc543806053的博客
相关推荐

2022-03-17 08:30:28

Python私有属性私有方法

2023-09-16 19:38:17

Python私有属性私有方法

2009-07-21 17:26:09

Scala本地函数

2011-08-16 10:35:59

Objective_C私有方法

2020-07-22 14:10:17

Chrome 84空闲检测前端

2020-12-30 07:08:27

Java方法测试

2011-12-29 14:28:23

Java

2011-03-30 16:54:13

JUnit

2009-06-19 16:26:51

JUnit测试骨架

2013-01-07 13:54:17

Android开发JUnit单元测试

2024-03-07 09:37:45

C#表达式(树)动态方法

2009-07-15 17:49:09

Jython开发

2012-02-07 09:08:50

Feed4JUnitJava

2011-08-11 13:02:43

Struts2Junit

2017-01-16 12:12:29

单元测试JUnit

2017-01-14 23:26:17

单元测试JUnit测试

2011-11-18 15:18:41

Junit单元测试Java

2021-01-07 14:06:30

Spring BootJUnit5Java

2022-02-11 09:38:14

Java技巧反射

2010-04-13 10:49:32

点赞
收藏

51CTO技术栈公众号