单元测试
概述: 针对最小的功能单元(方法), 编写测试代码对其进行正确性测试
手动测试的问题
只能在main方法中编写测试代码
无法实现自动化测试, 一个方法测试失败, 会影响其他方法的测试
没有测试报告, 需要自己观察测试结果
Junit框架
用来对方法进行测试, 第三方公司开源的, 已经集成在IDEA中
优势:
可以灵活的编写代码, 可以针对某个方法执行测试,
也可以一键完成全部方法的自动化测试, 且每个方法各自独立,
自动生成测试报告
快速入门
为需要测试的业务类, 定义对应的测试类,
并为每个业务方法, 编写对应的测试方法(公共, 无参, 无返回值)
测试方法上声明@Test注解, 然后再测试方法中调用被测的业务方法,
Alt+enter => "JUnit4"
执行测试方法
执行指定方法: 选择方法, 右键Run运行
执行指定类的方法: 右键Run运行
执行全部的方法: 选择项目,右键"Run All Tests"
结果断言: Assert.assertEquals(3, index);
通过预测运行结果测试方法是否符合需求
常见注解
反射
反射就是拿到类文件, 然后以编程的方式操作类的成员
目的
加载类, 获取类的字节码: Class对象
方法1
Class c1 = 类名.class
方法2
Class.ForName("类的全名")
方法3
对象.getClass()
获取类的构造器: Constructor对象
获取类的构造器
使用构造器初始化对象
获取类的成员变量: Field对象
获取类中的成员变量
为成员变量取值/赋值
获取类的成员方法: Method对象
获取类的成员方法
执行方法
作用
得到一个类的全部成分然后操作
可以破坏封装性
主流的Java框架都会用到反射技术设计通用的功能
案例: 保存文件
定义一个方法, 接收任意对象
通过反射获取对象的Class对象, 然后获取全部的成员变量
遍历成员变量, 然后提取成本成员变量的值
把成员变量名, 变量值, 写入到文件中
注解
Java代码中的特殊标记,作用是让程序根据注解信息执行代码
注解可以用在类, 构造器, 方法, 成员变量, 参数,
自定义注解
public @interface 注解名称 {
public 属性类型 属性名() default 默认值;
}
特殊属性名: value
如果注解中只有一个value属性, 使用该注解时, value的名称可以不写
注解的本质是一个接口, java中的所有注解都继承了Annotation接口
@注解(,..)其实就是一个实现类对象, 实现了该注解以及Annotation接口
元注解
修饰注解的注解
注解解析
判断类/方法/成员变量上是否存在注解, 并把注解里的内容解析出来
步骤
要解析谁上面的注解, 就应该先拿到谁
比如要解析类上面的注解, 就应该先获取该类的class对象, 在通过class对象解析其上面的注解
比如要解析成员方法上的注解, 就应该获取该成员方法的Method对象, 再通过method对象解析其上面的注解
Class Method Field Constructor 都实现了AnnotatedElement接口, 它们都有解析注解的能力
案例: 模拟Junit框架
动态代理
作用: 如果对象嫌身上干的活太多, 可以通过代理转移部分职责
前提:
对象有什么方法想被代理, 代理就一定要有对应的方法
中介怎么知道 对象需要被代理 的方法 有哪些? 通过接口
创建
java.lang.reflect.Proxy类: 提供了为对象产生代理对象的方法
案例: 优化代码
标签:java,对象,成员,高级,技术,获取,测试,注解,方法 From: https://blog.csdn.net/CSDN20221005/article/details/144550945