手动编写测试框架升级版

之前编写了一个测试某个类中加注解的方法是否有异常,并将结果记录到文件中;现在升级一下,编写一个测试某个包下所有加测试注解的java类中的所有方法,(当然也可以测试一部分方法,再加个方法的自定义注解,感觉没什么必要就没有实现),并将测试结果保存到文件中。

package CheShiKuangJia;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/*
    手动编写测试框架
        功能:
            可测试CheShiKuangJia包下所有加了Check1注解的java类中的所有方法,并纪录到文件bug1.txt中
            可以将包路径设置为参数,日后开发中使用时直接传参,方便统一查看测试结果
 */
public class TestCheck1 {
    public static void main(String[] args) throws Exception {
        File directory = new File("anno\\src\\CheShiKuangJia");
        if (directory.exists()){
            //包存在
            File[] files = directory.listFiles();
            if (files!=null){
                //包不为空
                List<String> list=new ArrayList<>();//存储java类名
                for (int i = 0; i < files.length; i++) {
                    String name=files[i].getName();
                    if (name.endsWith(".java")){
                        list.add(name.substring(0,name.length()-5));
                    }
                }
                Class[] cls=new Class[list.size()];//存储所有class
                int number = 0;//出现异常的次数
                //记录测试结果文件
                BufferedWriter bw = new BufferedWriter(new FileWriter("anno\\src\\CheShiKuangJia\\bug1.txt"));
                for (int i = 0; i < cls.length; i++) {
                    //加载类进入内存
                    Class aClass = Class.forName("CheShiKuangJia." + list.get(i));
                    //接口不能创建对象,所以过滤掉以Check开头的java类
                    if (!list.get(i).startsWith("Check")) {
                        //创建class类对象
                        Object obj = aClass.newInstance();
                        //测试添加Check1注解的类
                        if (aClass.isAnnotationPresent(CheShiKuangJia.Check1.class)) {
                            //使用getDeclaredMethods()方法获取所有声明的方法对象但是不包括继承方法
                            Method[] methods = aClass.getDeclaredMethods();
                            for (Method method : methods) {
                                try {
                                    //执行方法
                                    method.invoke(obj);
                                } catch (Exception e) {
                                    //捕获异常,纪录到文件中
                                    number++;
                                    bw.write(method.getName() + "方法出异常了");
                                    bw.newLine();
                                    bw.write("异常的名称:" + e.getCause());
                                    bw.newLine();
                                    bw.write("异常原因:" + e.getMessage());
                                    bw.newLine();
                                    bw.write("--------------------------------------------------");
                                    bw.newLine();
                                }
                            }
                        }
                    }
                }
                bw.write("本次测试一共出现了" + number + "次异常");
                bw.flush();
                bw.close();
            }
        }
    }
}

注解Check1

package CheShiKuangJia;

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

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Check1 {
}

测试类

package CheShiKuangJia;

@Check1
public class Caculator {
    @Check
    public void add(){
        String str=null;
        str.toString();
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void subtract(){
        System.out.println("1-0="+(1-0));
    }
    @Check
    public void multiply(){
        System.out.println("1*0="+(1*0));
    }
    public void divide(){
        System.out.println("1/0="+(1/0));
    }
}

package CheShiKuangJia;
@Check1
public class Caculator2 {
    public void ceshi(){
        String x=null;
        x.toString();
    }
    private String ceshi2(){
        String[] str=new String[3];
        return str[3];
    }
}

bug1.txt

add方法出异常了
异常的名称:null
异常原因:java.lang.NullPointerException
--------------------------------------------------
divide方法出异常了
异常的名称:null
异常原因:java.lang.ArithmeticException: / by zero
--------------------------------------------------
ceshi方法出异常了
异常的名称:null
异常原因:java.lang.NullPointerException
--------------------------------------------------
ceshi2方法出异常了
异常的名称:Class CheShiKuangJia.TestCheck1 can not access a member of class CheShiKuangJia.Caculator2 with modifiers "private"
异常原因:null
--------------------------------------------------
本次测试一共出现了4次异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值