private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法
来源:互联网 发布:衣服打版软件 编辑:程序博客网 时间:2024/06/04 18:31
代码测试覆盖率是衡量软件质量的重要指标,但常规的Junit不能对private方法进行测试,那么就会影响我们的覆盖率。
不过有一个办法可以在Junit框架中测试private的方法,那就是反射!
我们知道可以通过反射method.invoke来调用某个方法,但如果方法前面为private怎么办呢?我们可以使用method.setAccessible(true);来跳过安全检查,就可以调用private方法了。原理就这么简单。
这里,我将这个功能封装成一个工具类,单元测试中可以直接调用即可:
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- public class PrivateMethodTestUtils {
- /**
- *
- * @Description:调用只有一个参数的私有方法
- * @since 1.0.0
- * @Date:2013-1-23 下午2:54:00
- * @param methodHostInstance
- * @param methodName
- * @param arg
- * @return Object
- */
- public static Object invoke(Object methodHostInstance, String methodName,
- Object arg) {
- Class<?>[] parameterTypes = { arg.getClass() };
- Object[] args = { arg };
- return invoke(methodHostInstance, methodName, parameterTypes, args);
- }
- /**
- *
- * @Description:调用有多个参数的私有方法
- * @since 1.0.0
- * @Date:2013-1-23 下午2:54:40
- * @param methodHostInstance
- * @param methodName
- * @param parameterTypes
- * @param args
- * @return Object
- */
- public static Object invoke(Object methodHostInstance, String methodName,
- Class<?>[] parameterTypes, Object[] args) {
- try {
- Method method = methodHostInstance.getClass().getDeclaredMethod(
- methodName, parameterTypes);
- method.setAccessible(true);
- try {
- return method.invoke(methodHostInstance, args);
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- method.setAccessible(false);
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class PrivateMethodTestUtils { /** * * @Description:调用只有一个参数的私有方法 * @since 1.0.0 * @Date:2013-1-23 下午2:54:00 * @param methodHostInstance * @param methodName * @param arg * @return Object */public static Object invoke(Object methodHostInstance, String methodName,Object arg) {Class<?>[] parameterTypes = { arg.getClass() };Object[] args = { arg };return invoke(methodHostInstance, methodName, parameterTypes, args);}/** * * @Description:调用有多个参数的私有方法 * @since 1.0.0 * @Date:2013-1-23 下午2:54:40 * @param methodHostInstance * @param methodName * @param parameterTypes * @param args * @return Object */public static Object invoke(Object methodHostInstance, String methodName,Class<?>[] parameterTypes, Object[] args) {try {Method method = methodHostInstance.getClass().getDeclaredMethod(methodName, parameterTypes);method.setAccessible(true);try {return method.invoke(methodHostInstance, args);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}method.setAccessible(false);} catch (SecurityException e) {e.printStackTrace();} catch (NoSuchMethodException e) {e.printStackTrace();}return null;}}
- private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法
- 首页文章分类 关于 Search private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法
- Junit4 单元测试 private 私有方法 abstract类
- java 私有方法(private)
- java 反射调用 私有构造类中 private static final 属性的方法
- 测试反射调用私有方法/私有静态方法
- 反射调用私有方法
- 私有变量和私有方法private的用法
- 通过反射调用private方法
- C#反射调用私有方法
- 利用反射调用私有方法
- 利用反射测试私有方法
- 通过反射测试私有方法
- java利用反射访问类的私有(private)属性及方法
- 关于java的反射,调用私有方法(有参数私有方法),私有属性
- java利用反射来调用一个类的私有方法
- JUnit单元测试(五)--通过反射测试私有方法
- [JAVA]在Junit中测试私有函数的方法(junit, private, method)
- C# 4.0 并行计算部分(附件有图)
- 关于树(平衡树)的旋转--理解方便记忆
- 前台JSP页面以表格展示数据的过程中出现了重复数据
- 查看mongo数据库的慢查询
- iPKG包制作(ipkg-build)
- private(私有)方法单元测试无法覆盖?那就用反射调用来测试private(私有)方法
- #云端对话——云的那些事#《云计算:大数据时代的系统工程》作者在中关村图书大厦和你面对面
- 用shell命令分割大日志文件
- 通过Hibernate配置获取数据库表的具体信息
- jetty启动运行调试工具类
- Android开发视频教学第一季(17-34集)视频源码下载
- 一些鲜为人知的但却很有趣的Unix/Linux命令(三)
- java 发送邮件功能
- 短URL生成转换