软件构造试验的所学所感(1)Lab1
在编写Lab1代码的时候,遇到的一些困难所得到了一些启发,在学习一些类库的时候也掌握了很多技巧。
本篇介绍如何利用反射机制编写Test文件以测试private方法
背景:
在编写程序的时候基本都是要用Juinit5来进行单元测试,这对于public修饰符修饰的方法而言测试类可以正常调用该方法,但由于private修饰的方法是不允许其他类调用的,所以此时必须要用到JAVA里反射部分的知识。
-
先介绍关于反射的部分知识以便于接下来的讲解
-
反射,即能够分析类能力的程序。Java里的反射库提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。由于反射功能极其强大,所以其可以使用在许多地方,如:
- 在运行时分析类的能力
- 在运行时查看对象,例如,编写一个toString方法供所有类使用。
- 实现通用的数组操作代码
- 利用Method对象,该对象类似于C++中的函数指针
示例代码如下:
获取反射类的方法目前我使用的有两种:
前者只需要调用类自带的class 方法即可,后者需要利用Class的forName方法其中它的输入参数要求是完整的类名(必要时还有加上包名.)
- 在我的代码里我是直接通过类自带方法getClass()
获取了类c之后,因为要修改private方法使得测试类可以调用该方法,因此需要通过
-
subjectService.class.getDeclaredMethod(autoMatchConfig.getMethodName(),Integer.class)
-
其等同于c.getDeclaredMethods()
其中输入参数第一个是方法名字,第二个是方法参数 如我的代码中:Method testmyaddVertex = stuClass.getDeclaredMethod(“addVertex”, Person.class);
之后要修改访问权限:
即可。
然后为了可以调用该方法,需要有一个该类的实例比如mygraph
之后便可以调用方法,利用Method的方法invoke。
其中方法的输入参数第一个是该方法所属类的实例,第二个是调用该方法所需要的参数。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!