- 添加依赖
新建一个maven项目,然后添加依赖:
<!-- 告诉该类库用于测试阶段 -->
<scope>test</scope>
</dependency>
知识兔- 接口
1 package cn.edu.xcu.reflect.dao;
2 public interface BookDao {
3 public void insert();
4 public void update();
5 public void del();
6 }
知识兔- 实现类
import org.junit.Test;
import cn.edu.xcu.reflect.dao.BookDao;
//这么做存在代码重复
public class BookDaoImpl implements BookDao {
@Test//告诉 Junit 该方法要运行
@Override
public void insert() {
try {
System.out.println("开启会话");
////
System.out.println("插入书籍");
///
System.out.println("事务提交");
} catch (Exception e) {
System.out.println("事务回滚");
e.printStackTrace();
} finally {
System.out.println("关闭会话");
}
}
知识兔- 测试
- 定义注解
// 因为通过反射读取
@Target({ ElementType.METHOD }) // 测试方法
public @interface Test {
}
知识兔- 在被测试类上添加注解
//这么做存在代码重复
public class BookDaoImpl implements BookDao {
@Test
@Override
public void insert() {
try {
System.out.println("开启会话");
////
System.out.println("插入书籍");
///
System.out.println("事务提交");
} catch (Exception e) {
System.out.println("事务回滚");
e.printStackTrace();
} finally {
System.out.println("关闭会话");
}
}
@Override
public void update() {
try {
System.out.println("开启会话");
////
System.out.println("修改书籍");
///
System.out.println("事务提交");
} catch (Exception e) {
System.out.println("事务回滚");
e.printStackTrace();
} finally {
System.out.println("关闭会话");
}
}
知识兔- 编写测试类工具
public class TestTool {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
startTest(BookDaoImpl.class);
}
public static void startTest(Class clazz)throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 1 告诉测试那个类
Object obj = clazz.newInstance();
// 2 判断该类的方法是否有我们自定义的注解,如果有就调用该方法
Method[] ms = clazz.getDeclaredMethods();
for (Method method : ms) {
if (method.isAnnotationPresent(Test.class)) {
method.invoke(obj);
}
}
}
}
知识兔