一.模拟JUnit4
思路:
- :开发出3个注解
- :把注解贴在测试类中
- :开发第三方程序赋予注解功能(执行的先后顺序)
- 获取到要测试的字节码对象
- 获取字节码对象中的所有方法
- 归类区分带有不同注解的方法,分3类
- 迭代所有要执行的方法
在所有要执行的方法前先执行MyBefore注解的方法
在所有要执行的方法后再执行MyAfter注解的方法
//MyAftere注解
@Target(ElementType.METHOD)//只能贴在方法上
@Retention(RetentionPolicy.RUNTIME)//保留到运行时期
public @interface MyAfter {
}
//MyBefor注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyBefore {
}
//MyTest注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}
//单元测试类
public class EmployeeDAOTTest {
//
@MyBefore
public void init() {
System.out.println("加载资源...");
}
@MyTest
public void test() {
System.out.println("单元测试1....");
}
@MyTest
public void test1() {
System.out.println("单元测试2....");
}
@MyAfter
public void destory() {
System.out.println("释放资源...");
System.out.println();
}
}
//模拟JUnit4
public class JUnit5 {
public static void main(String[] args) throws Exception {
//1)获取字节码对象
Class clz = Class.forName("com.huangkun._03_junit.EmployeeDAOTTest");
//2)获取所有该类的方法
Method[] me = clz.getDeclaredMethods();
//3)遍历方法按注解分类
List<Method> listTest = new ArrayList<>();
List<Method> listBefore = new ArrayList<>();
List<Method> listAfter = new ArrayList<>();
for (Method method : me) {
if (method.isAnnotationPresent(MyBefore.class)) {
listBefore.add(method);
}else if(method.isAnnotationPresent(MyTest.class)) {
listTest.add(method);
}else if (method.isAnnotationPresent(MyAfter.class)) {
listAfter.add(method);
}
}
//4)按需求运行
Object obj = clz.newInstance();
for (Method method : listTest) {
//先运行初始化
for (Method before: listBefore) {
before.invoke(obj);
}
//运行测试方法
method.invoke(obj);
//运行回收资源
for (Method after : listAfter) {
after.invoke(obj);
}
}
}
}
二.JavaBean规范
- 广义:所有的类都是JavaBean.
- 狭义:遵循某一些规范的类.
- JavaBean 是一种JAVA语言写成的可重用组件(类).
必须遵循一定的规范:- :类必须使用public修饰,一个文件一个类.
- :必须保证有公共无参数构造器.
- :包含了属性的操作手段(给属性赋值,获取属性值). getter/setter
- 分类:
- :复杂:UI,比如Button,Panel,Window类.
- :简单:domain,dao,service组件,封装数据,操作数据操作功能,逻辑运算等.
- 成员:
- :方法:Method
- :事件:event
- :属性:property
- 设置属性值:writeableMethod: setter方法:
- 获取属性值:readableMethod: getter方法:
- 标准的属性:一般提供字段,Eclipse生成getter/setter,字段和属性同名.
三.Lombok
- Lombok是一款小巧的代码生成工具。官方网址:http://projectlombok.org/
- 如何安装,如何使用
- java -jar lombok.jar
- 在Java项目中导入lombok.jar包
- 使用注解@Setter/@Getter/@ToString/@Data/@AllArgsConstructor/@NoArgsConstructor等
//运用Lombok的JavaBean
@AllArgsConstructor//默认生成所有参数的构造器
@NoArgsConstructor//默认生成没有参数的构造器
@Data//默认生成 setter/getter/toString/hashCode等
public class Person {
private String name;
private int age;
private boolean isMan;
}