单元测试
测试分类:黑盒测试和白盒测试。
黑盒测试:不需要写程序,输入值,看程序是输出预期结果。
白盒测试:需要写程序,关心程序的运行过程。
测试建议:
包名:xx.xx.xx.test
类名:XxxTest
方法名:void testXxx() 可以独立运行
Junit单元测试步骤:
创建测试类》写测试方法》打注解@Test注解》导入依赖(如下图)
@Before && @After 分别在@Test的方法执行前后自动执行。
断言
* 一般我们会使用断言操作来处理结果
* Assert.assertEquals(期望的结果,运算的结果);
反射
概念:
反射是框架设计的灵魂。框架是软件的半成品,使用框架可以化简编码,提高开发效率。
类的成员变量、构造方法、成员方法等各个组成部分封装为其他对象,这就是反射机制。
好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。
反射获取(.class)字节码对象3种方式
(1)Class.forName("全类名");
这种方式多用于加载配置文件,通过获取其中的全类名等信息,把对应的全类名字节码文件加载到内存中,获取字节码对象(Class对象)
(2)类名.class
通过类(Class)的class属性获取字节码对象
(3)类对象.getClass()
通过对象(Object)中的getClass()获取字节码对象。
注意:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
配置文件中有全类名,马上想到反射。
反射中常用的方法获取信息
例如成员变量、构造方法、成员方法等。没有Declared,是获取public修饰的内容,有是获取所有内容。
代码如下:
例子
通过加载配置文件、调用配置信息中类对应的方法。
注解
概念
Annotation又叫做元数据,与类、接口、枚举是在同一个层次,jdk1.5后的新特性,用来说明程序给计算机看。
作用分类
①编写文档:通过代码里标识的注解【生成文档doc文档】
②代码分析:通过代码里标识的注解【使用反射】对代码进行分析
③编译检查:通过代码里标识的注解【Override】让编译器能够实现基本的编译检查
JDK中预定义的一些注解
* @Override :检测被该注解标注的方法是否是继承自父类(接口)的
* @Deprecated:该注解标注的内容,表示已过时。
Date很多方法过期,Calender代替了。
* @SuppressWarnings:压制警告
* 一般传递参数all @SuppressWarnings("all")
自定义注
格式:
元注解
public @interface 注解名称{
属性列表;
}
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
* public interface MyAnno extends java.lang.annotation.Annotation {}
通过反编译看出。
属性:接口中的抽象方法
自定义注解可以包含的5中属性:基本数据类型、字符串、枚举、注解、以及他们对应的数组;
定义了属性,在使用时需要给属性赋值
1. 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
2. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
3. 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
代码:
元注解
用于描述注解的注解
@Target:描述注解能够作用的位置
ElementType取值:
* TYPE:可以作用于类上
* METHOD:可以作用于方法上
* FIELD:可以作用于成员变量上
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
一般自己定义的,用runtime修饰。
@Override是
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承
例子
(1)通过注解和反射,调用注解中描述的类的方法。
(2)通过注解,自动生成测试方法的bug信息。