测试分类:
1,白盒测试:需要写代码。关注程序具体的执行流程
2,黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值
Junit使用:白盒测试
- 步骤
1,定义一个测试类(测试用例)
2,定义测试方法:可以独立运行
3,给方法加@Test
4,导入Junit依赖环境
判断结果:
红色:失败
绿色:成功
(说白了,我们一般都不会去看结果的正确性来判断程序有无bug,但为了能输出正确的结果,我们一般会采用断言的方式来处理结果)
断言:Assert.assertEquals(期望的结果,运算的结果);
@Before:初始化方法,用于资源申请,所有测试方法再执行之前都会先执行该方法。
@After:释放资源方法,在所有测试方法执行完后,都会自动执行该方法
反射:框架设计的灵魂
-
框架:半成品软件。可以在框架的基础上进行软件开发,简化代码
-
反射:将类的各个组成部分封装为其他对象,这就是反射机制
好处:
1,可以在程序运行过程中,操作这些对象。
2,可以解耦,提高程序的可扩展性。 -
获取Class对象的方式:
1,class.forName(“全类名”):将字节码文件加载进内存,返回Class对象
(多用于配置文件,将类名定义在配置文件中。读取文件,加载类)
2,类名.class:通过类名的属性class获取
(多用于参数的传递)
3,对象.getClass():getClass()方法在Object类中定义着。
(多用于对象的获取字节码的方式)
结论:同一个字节码文件在一次程序运行过程中,只会被加载一次,无论通过哪一种方式获取Class对象都是同一个。
常用获取功能:
1,获取成员变量:
Filed[] getFileds():
Filed getFiled(String name)
Filed[] getDeclaredFileds()
Filed getDeclaredFiled(String name)
Filed成员变量操作:
1,设置值:void set(Object object,Object value)
2,获取值:get(Object obj)
3,忽略访问权限修饰符的安全检查:setAccessible(true):暴力反射
2,获取构造方法:
Constructor<?>[] getConstructor():获取所有public修饰的成员变量
Constructor<T> getConstructor(Class<?>... parameterTypes):获取指定名称的public修饰的成员变量
Constructor<?>[] getDeclaredConstructor():获取所有成员变量,不考虑修饰符
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
3,获取成员方法:
Method<?>[] getMethods()
Method<T> getMethod(Class<?>... parameterTypes)
Method<?>[] getDeclaredMethods()
Method<T> getDeclaredMethod(Class<?>... parameterTypes)
4,获取类名
String getName()
- 案例:
需求:写一个“框架”,不能改变该类的任何代码的前提下,可以帮助我们创建任何类的对象,并且执行其中任意方法。
实现:
1,配置文件
2,反射
步骤:
1,将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2,在程序中加载读取配置文件
3,使用反射技术来加载类文件进内存
4,创建对象
5,执行方法
注解:
概念:说明程序的,给计算机看的
注释:用文字描述程序的,给程序员看的
使用注解:@注解名称(比如@Override)
作用分类:
1,编写文档:通过代码里标识的注解生成文档【生成doc文档】
2,代码分析:通过代码里标识的注解对代码进行分析【使用反射】
3,编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】