米盾安全

Java 如何自定义注解以及如何使用自定义注解

218次阅读
没有评论

共计 1631 个字符,预计需要花费 5 分钟才能阅读完成。

对所有使用 @Tested 的注解运行看是否报错。

NoBug.java

import ceshi.Tested;

public class NoBug {
    @Tested
    public void suanShu(){
        System.out.println("1234567890");
    }

    @Tested
    public void jiafa(){
        System.out.println("1+1="+1+1);
    }

    @Tested
    public void jiefa(){
        System.out.println("1-1="+(1-1));
    }

    @Tested
    public void chengfa(){
        System.out.println("3 x 5="+ 3*5);
    }

    @Tested
    public void chufa(){
        System.out.println("6 / 0="+ 6 / 0);
    }

    public void ziwojieshao(){
        System.out.println("我写的程序没有 bug!");
    }

}

注解类-Tested

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

@Retention(RetentionPolicy.RUNTIME)
public @interface Tested {

}

注解处理器-TestTool.java

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestTool {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NoBug testobj = new NoBug();
        Class clazz = testobj.getClass();
        Method[] method = clazz.getDeclaredMethods();
        //用来记录测试产生的 log 信息
        StringBuilder log = new StringBuilder();
        // 记录异常的次数
        int errornum = 0;
        for ( Method m: method ) {
            // 只有被 @Tested 标注过的方法才进行测试
            if ( m.isAnnotationPresent( Tested.class )) {
                try {
                    m.setAccessible(true);
                    m.invoke(testobj, null);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    //e.printStackTrace();
                    errornum++;
                    log.append(m.getName());
                    log.append(" ");
                    log.append("has error:");
                    log.append("\n\r  caused by ");
                    //记录测试过程中,发生的异常的名称
                    log.append(e.getCause().getClass().getSimpleName());
                    log.append("\n\r");
                    //记录测试过程中,发生的异常的具体信息
                    log.append(e.getCause().getMessage());
                    log.append("\n\r");
                }
            }
        }

        log.append(clazz.getSimpleName());
        log.append(" has  ");
        log.append(errornum);
        log.append(" error.");
        // 生成测试报告
        System.out.println(log.toString());

    }

}

结果

1234567890
1+1=11
1-1=0
3 x 5=15
chufa has error:

  caused by ArithmeticException

/ by zero

NoBug has  1 error.

提醒:本文发布于165天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 
阿蛮君
版权声明:本站原创文章,由 阿蛮君 2023-04-12发表,共计1631字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2023 阿蛮君博客 湘ICP备2023001393号
本网站由 青博数据 提供云计算服务 | 又拍云 米盾安全提供CDN加速/云存储服务