Junit
- 测试分类:
- 黑盒测试:无需代码;关注输出
- 白盒测试:需要代码;关注流程
- Junit使用:
- 步骤:
- 定义类:
测试类名:XxxxTest
包名:cn.itcast.test - 定义方法:可独立运行
方法名:testXxx()
返回值:void
参数:空参
- 给方法加@test(位置参考@Override)
- 导入junit依赖环境
- 定义类:
- 判定结果:红色(失败)/ 绿色(成功)
- 断言:Assert.assertEquals(期望结果,真实结果)
- 申请资源方法:@Before
测试方法前自动被执行 - 释放资源方法:@After
测试方法后自动被执行
- 步骤:
反射:框架设计
-
框架:半成品软件
-
java代码三阶段:
1.Source源代码阶段
2.(ClassLoader类加载器)Class类对象阶段
3.(创建对象)Runtime运行时阶段 -
反射:将类的各个部分分装为其他对象
好处:
1.可在运行过程中操作对象
2.可以解耦,提高可扩展性 -
获取Class对象的三种方式
1.Class.forName(“全类名”) (#多用于配置文件)
2.类名.class (#多用于参数的传递)
3.对象.getClass() (#多用于对象获取字节码的方式)
#.同一个字节码文件(*.class),在运行中只会被加载一次 -
Class对象功能
1.获取成员变量
Field[] getFields()
Field getField(String name)
Field[] getDeclaredFields()
Field getDeclaredField(String name)
2.获取构造方法
Constructor<?>[] getConstructors()
Constructor<T> getConstructor(类<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
3.获取成员方法
Method[] getMethods()
Methrod getMethod(String name,类<?>...parameterTypes)
Method[] getDeclaredMethods()
Methrod getDeclaredMethod(String name,类<?>...parameterTypes)
4.获取类名
String getName()
-
Field:成员变量
1.设置值 void set(Object obj,Object value) 2.获取值 get(Object obj) 3.忽略访问权限修饰符的安全检查 setAccessible(true) //暴力反射
-
Constructor:构造方法
1.创建对象 T newInstance(Object... initargs) 使用空参构造方法创建对象,操作可以简化:Class对象.newInstance()
-
Method:方法对象
1.执行方法 Object invoke(Object obj,Object... args) 2.获取方法名称 String getName
注解:
-
概念:说明程序,给计算机看
-
注释:用文字描述,给程序员看
-
概念描述:
1.说明程序的
2.使用注解:@注解名称
3.JDK1.5后新特性 -
作用分类:
1.编写文档:生成doc文档
2.代码分析:对代码进行分析,使用反射
3.编译检查:实现基本编译检查(@Override) -
JDK中预定义的注解
1.@Override:检测标注的地方是否继承自父类(接口)
2.@Deprecated:表示注解的内容已过时
3.@SuppressWarnings:压制警告
*一般传递参数all @SuppressWarnings(“all”) -
自定义注解
- 格式:
元注解:
public @interface 注解名称{} - 本质:
注解本质上是一个接口,默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation {} - 属性:接口中的抽象方法
- 要求:
1.属性的返回值
2.定义属性,并在使用时给属性赋值基本数据类型 String 枚举 注解 以上类型的数组
用default关键字定义默认值,使用时可省略赋值 如果只有value需要赋值,可省略“value =” 数组赋值,若只有一个值可省略“{” “}”
- 要求:
- 元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置
- ElementType取值:
1.TYPE:可作用于类上
2.METHOD:可作用于方法上
3.FIELD:可作用于成员变量上
- ElementType取值:
- @Retention:描述注解被保留的阶段
- @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
- @Document:描述注解是否被抽取到api文档中
* - @Inherited:描述注解是否被子类继承
- @Target:描述注解能够作用的位置
- 格式:
-
在程序使用(解析)注解:获取注解中定义的属性值
1.获取注解定义的位置的对象(Class,Method,Field)
2.获取指定的注解
*getAnnotation(Class)
//在内存里生成了一个该注解接口的子类实现对象
3.调用注解中的抽象方法获取配置的属性值