02.模拟JUnit4

一.模拟JUnit4

思路:

  1. :开发出3个注解
  2. :把注解贴在测试类中
  3. :开发第三方程序赋予注解功能(执行的先后顺序)
    1. 获取到要测试的字节码对象
    2. 获取字节码对象中的所有方法
    3. 归类区分带有不同注解的方法,分3类
    4. 迭代所有要执行的方法
      在所有要执行的方法前先执行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规范

  1. 广义:所有的类都是JavaBean.
  2. 狭义:遵循某一些规范的类.

  1. JavaBean 是一种JAVA语言写成的可重用组件(类).
    必须遵循一定的规范:
    1. :类必须使用public修饰,一个文件一个类.
    2. :必须保证有公共无参数构造器.
    3. :包含了属性的操作手段(给属性赋值,获取属性值). getter/setter
  2. 分类:
    1. :复杂:UI,比如Button,Panel,Window类.
    2. :简单:domain,dao,service组件,封装数据,操作数据操作功能,逻辑运算等.
  3. 成员:
    1. :方法:Method
    2. :事件:event
    3. :属性:property

  1. 设置属性值:writeableMethod: setter方法:
  2. 获取属性值:readableMethod: getter方法:
  3. 标准的属性:一般提供字段,Eclipse生成getter/setter,字段和属性同名.

三.Lombok

  1. Lombok是一款小巧的代码生成工具。官方网址:http://projectlombok.org/
  2. 如何安装,如何使用
    1. java -jar lombok.jar
    2. 在Java项目中导入lombok.jar包
    3. 使用注解@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;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值