时间:2020-10-15 23:16:34 | 栏目:JAVA代码 | 点击:次
创建自定义注解
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Test { }
建立测试类
public class UserTest { @Test public void testInsert() { User user = null; System.out.println(user.getUsername()); } @Test public void testQuery() { Blog b = new Blog(); b.setTips(new String[] {"技术","java","多线程"}); String[] tips = b.getTips(); System.out.println(tips[3]); } @Test public void divide() { System.out.println(10/0); } }
编写工具类
public static void main(String[] args) { BufferedWriter bw = null; try { //记录方法总数 int methodCount = 0; //记录错误方法总数 int expCount = 0; //准备一个文件输出流,用于记录程序执行过程中的异常信息 bw = new BufferedWriter(new FileWriter("log.txt")); // 获取类的Class对象 Class clz = UserTest.class; //创建目标类型的实例对象 Object obj = clz.newInstance(); //获取所有的方法对象 Method[] methods = clz.getMethods(); for (Method m : methods) { if(m.isAnnotationPresent(Test.class)) { //统计总共有多少方法需要被测试 methodCount++; } } bw.write("测试方法总数:" + methodCount); bw.newLine(); bw.write("================================"); bw.newLine(); for (Method m : methods) { try { //如果方法上面包含了Test注解则作为测试方法进行测试 if(m.isAnnotationPresent(Test.class)) { m.invoke(obj); } } catch (Exception e) { //异常方法计数器递增 expCount++; bw.write(m.getName() + "出现异常"); bw.newLine(); bw.write("类型:" + e.getCause().getClass()); bw.newLine(); bw.write("原因:" + e.getCause().getMessage()); bw.newLine(); bw.write("================================"); bw.newLine(); } } bw.write("错误方法总数:" + expCount); bw.newLine(); } catch (Exception e) { e.printStackTrace(); }finally { try { if(bw != null) { bw.flush(); bw.close(); } } catch (IOException e) { e.printStackTrace(); } } }