Junit单元测试
测试分类:
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值
白盒测试:需要写代码的。关注程序具体的执行流程
Junit使用:白盒测试
步骤:
1.定义一个测试类(测试用例)
建议:测试类名:被测试的类名Test Calculator
包名:xxx.xxx.xx.test cn.itcast.test
2.定义测试方法:可以独立运行
建议:方法名:test测试的方法名
返回值:void
参数列表:空参
3.给方法加@Test
4.导入junit依赖环境
判定结果:
红色:失败
绿色:成功
一般我们会使用断言操作来处理结果
Assert.assertEquals(期望的结果,运算结果)
补充:
@Before:修饰的方法会在测试方法之前被自动执行
@After:修饰的方法在测试方法执行之后自动被执行
反射:框架设计的灵魂
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
反射:将类的各个组成部分封装成其他对象,这就是反射机制
好处:
1.在程序运行过程中,操作这些对象
2.可以解耦,提高程序的可拓展性
获取Class对象的方式:
1.Class. forName(“全类名”):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类
2.类名.class:通过类名的属性class获取
多用于参数的传递
3.对象.getClass():getClass()方法在Object类中定义着
多用于对象的获取字节码的方式
结论:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个
Class对象功能:
-
获取成员变量
Field[] getFields():获取所有public修饰的成员变量
Field getField(String name):获取指定名称的public修饰的成员变量
Field[] geDeclaredtFields():获取所有的成员变量,不考虑修饰符
Field geDeclaredtField(String name)
-
获取构造方法们
Constructor<?> [] getConstrucyors()
Constructor getConstrucyor(类<?>… parameterTypes)
Constructor getDeclaredConstrucyor(类<?>… parameterTypes)
Constructor<?> [] getDeclaredConstrucyors()
-
获取成员方法们
Method[] getMethods()
Method getMethod(String name,类<?>…parameterTypes)
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name,类<?>…parameterTypes)
-
获取类名
String getName()
Field:成员变量
操作
1.设置值
void set(Object obj,Object value)
2.获取值
get(Object obj)
3.忽略访问权限修饰符的安全检查
setAccessible(true):暴力反射
Construtor:构造方法
创建对象:
T newInstance(Object…initargs)
如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
Method:方法对象
执行方法:
Object invoke(Object obj,Object…args )
获取方法名称:
String getName:获取方法名
案例:
需求:写一个”框架“,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
实现:1.配置文件
2.反射
步骤:
- 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
- 在程序中加载读取配置文件
- 使用反射技术来加载类文件进内存
- 创建对象
- 执行方法
注解
概念:说明程序的。给计算机看的
注释:用文字描述程序的。给程序员看的