java反射运用举例-junit测试私有方法

news/2024/5/19 3:30:59 标签: 反射, java
       记得以前刚接触junit那会,对于公有方法的测试运用的很是流畅,并且私有方法也是在这些公有方法中调用,都会测试覆盖到。

由于是新建的类,新建的方法,造数据一步一步的覆盖跑下去,确实只要有耐心,都可以搞定。

但是随着项目的逐渐深入,由于人员成本,时间成本等等问题,测试类的维护不知道从哪一个版本,

哪一位开发人员修改了业务逻辑开始,已经问题百出,一线飘红了,但是项目一直跑着也没出现什么问题[运气不错],

而且时间成本等问题一直存在,但是在这时你只是修改了私有方法的一部分逻辑,但是测试类你这次又必须得维护,

所以有两点必须解决:

1.把原有的测试case按照现有的逻辑把【主体】调通。

2.测试自己修改过的私有方法业务逻辑。


关于第一点没啥捷径,根据主逻辑调通。

关于第二点可以修改私有方法的修饰符,但是这种方式需要改动代码,所以不太靠谱,建议不要使用!

此处介绍通过反射来测试私有方法,方便实用!也能深刻体验一下反射的好处!


// 待测试的私有方法类
public class MethodClass
{
    private int add(int a, int b)
    {
        return a + b;
    }
}

// junit测试类
public class MethodClassTest extends TestCase
{
    public void testAdd()
    {
        MethodClass mc = new MethodClass();

        // 得到class对象
        Class<MethodClass> clazz = MethodClass.class;


        // 得到方法
        try
        {
            Method method = clazz.getDeclaredMethod("add", new Class[] {int.class, int.class });// 这里也可以用:Integer.TYPE

            method.setAccessible(true);// 抑制访问修饰符,使得私有方法变为可以访问的

            Object result = method.invoke(mc, new Object[] { 2, 3 });

            Assert.assertEquals(5, result);
        }
        catch (Exception e)
        {
            e.printStackTrace();

            Assert.fail();
        }
    }
}




http://www.niftyadmin.cn/n/1332830.html

相关文章

java反射--Field

反射中有个属性类Field&#xff0c;其提供关于属性的操作&#xff0c;下面通过一个实例来展示Field的运用&#xff01; 首先&#xff1a; 需要弄清楚 getFields()和getDeclaredFields()获取属性字段的区别&#xff1a; getFields()&#xff1a;获取该类中的public属性&#x…

Spring MVC01

1.简介 2.HelloWorld程序 3.Spring MVC的执行流程 4.对静态资源访问 5.注解的开发方式 6.响应传值 7.SpringMVC对JSON的支持 8.格式化JSON 一、简介 1.什么是MVC模型 MVC模型&#xff1a;是一种架构型的模式&#xff0c;本身不引入新功能&#xff0c;只是帮助我们将开发…

可伸缩的Web架构发展史

无意中发现这篇文章&#xff0c;对 【可伸缩的Web架构】 发展做了简单明了的讲解&#xff0c;值得推荐&#xff01;本文转载自这里近些年来&#xff0c;越来越多的行业开始和互联网结合&#xff0c;诞生了越来越多的互联网创业公司。互联网创业公司需要面对许多的不确定因素。如…

Spring MVC02

1.请求传参方式 2.日期类型处理 3.处理中文乱码问题 4.文件上传 5.文件下载 6.拦截器的使用 一、请求传参方式 1.情况一 最传统的方式,方法参数中带入request,通过request.getParameter("参数名"),再封装到JavaBean中(不要求掌握). <%--Created by IntelliJ…

SSM01

1、目录结构 2、准备项目的依赖 pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"htt…

navicat 创建存储过程

再简单的东西长时间不用了就会出错&#xff0c;特此即时的记录下来&#xff0c;以便以后参考&#xff01; 以下为navicat 创建存储过程步骤图解&#xff1a; 1. 2. 3. 4. 在存储过程正文中是输入一行语句测试用&#xff0c;点击保存 5.输入存储过程名称&#xff0c;点击确定 6.…

索引(index)_普通索引、唯一索引和复合索引.索引查询

索引对于优化数据库查询效率方面有着非常巨大的作用&#xff0c;下面是一个简单索引查询效率示例&#xff0c;希望能帮到一些朋友。 前提&#xff1a;范例表user_info&#xff0c;通过存储过程插入6万条数据。 表结构&#xff1a; 存储过程&#xff1a; BEGINDECLARE i INT;SET…

SSM02

1.mybatis逆向工程 2.多条件查询的实现 3.查询动态SQL 4.条件回显 5.分页功能 6.分页功能完善 一、mybatis逆向工程 1.简介 mybatis是目前很流行的持久层框架&#xff0c;其逆向工程更是大大缩减了我们的开发时间。所谓mybatis逆向工程&#xff0c;就是mybatis会根据我们…