模拟JUnit

package com.passer.junit4;
/*
 * JUnit测试单元
 */
public class JUnit4{

	@MyBefore
	public void before() throws Exception{
		System.out.println("before...");
	}
	@MyAfter
	public void after() throws Exception{
		System.out.println("after...");
	}
	
	@MyTest
	public void test1() throws Exception{
		System.out.println("测试1");
	}
	
	@MyTest
	public void test2() throws Exception{
		System.out.println("测试2");
	}

}

package com.passer.junit4;
/*
 * 模拟JUnit中@Before的注解
 */
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface MyBefore {

}

package com.passer.junit4;
/*
 * 模拟JUnit中的@After注解
 */
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface MyAfter {

}

package com.passer.junit4;
/*
 * 模拟JUnit中的@Test注解
 */
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(METHOD)
public @interface MyTest {

}

package com.passer.junit4;

import java.lang.reflect.Method;
import java.util.ArrayList;
/*
 * 模拟JUnit
 */
public class JUnitMock {
	public static void main(String []args) throws Exception {
		//获取JUnit4的字节码对象
		Class<JUnit4> clz=JUnit4.class;
		//获取JUnit4的实例对象
		JUnit4 junit4=clz.newInstance();
		//获取出JUnit4的所有方法
		Method [] ms=clz.getDeclaredMethods();
		//迭代出每一个方法,并判断每一个方法分别使用了什么注解,并归类存储
		ArrayList<Method> beforeList=new ArrayList<>();
		ArrayList<Method> testList=new ArrayList<>();
		ArrayList<Method> afterList=new ArrayList<>();
		for (Method m : ms) {
			if(m.isAnnotationPresent(MyBefore.class)) {
				beforeList.add(m);continue;
			}else if(m.isAnnotationPresent(MyTest.class)){
				testList.add(m);
			}else if(m.isAnnotationPresent(MyAfter.class)) {
				afterList.add(m);
			}
			
		}
		//循环迭代出testList中的每一个测试方法,并执行
		for (Method method : testList) {
			for(Method m:beforeList) {
				m.invoke(junit4);
			}
			method.invoke(junit4);
			for (Method m : afterList) {
				m.invoke(junit4);
			}
		}

	}
}

猜你喜欢

转载自blog.csdn.net/coderdogg/article/details/80356089