java自定义注解执行函数_Java使用自定义注解实现函数测试功能示例

本文实例讲述了Java使用自定义注解实现函数测试功能。分享给大家供大家参考,具体如下:

一 自定义注解

使用@interface定义Annotation

使用Annotation修饰程序中的类、方法、变量、接口等定义,通常我们会把Annotation放在所有修饰符之前。

定义带成员变量的Annotation。

为Annotation的成员变量指定初始值。

二 提取Annotation

Annotation接口来代表程序元素前面的注释,该接口是所有Annotation类型的父接口。

AnnotatedElement接口代表程序中可以接受注释的程序元素。

调用AnnotatedElement对象的如下三个方法来访问Annotation信息:

getAnnotation(Class annotationClass):返回该程序元素上存在的、指定类型的注释,如果该类型的注释不存在,则返回null。

Annotation[] getAnnotations():返回该程序元素上存在的所有注释。

boolean isAnnotationPresent(Class extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注释,存在则返回true,否则返回false。

三 实战——标记哪些方法是可测试的

1 Testable.java

import java.lang.annotation.*;

// 使用JDK的元数据Annotation:Retention

@Retention(RetentionPolicy.RUNTIME)

// 使用JDK的元数据Annotation:Target

@Target(ElementType.METHOD)

// 定义一个标记注解,不包含任何成员变量,即不可传入元数据

public @interface Testable

{

}

2 MyTest.java

public class MyTest

{

// 使用@Testable注解指定该方法是可测试的

@Testable

public static void m1()

{

}

public static void m2()

{

}

// 使用@Testable注解指定该方法是可测试的

@Testable

public static void m3()

{

throw new IllegalArgumentException("参数出错了!");

}

public static void m4()

{

}

// 使用@Testable注解指定该方法是可测试的

@Testable

public static void m5()

{

}

public static void m6()

{

}

// 使用@Testable注解指定该方法是可测试的

@Testable

public static void m7()

{

throw new RuntimeException("程序业务出现异常!");

}

public static void m8()

{

}

}

3 ProcessorTest.java

import java.lang.reflect.*;

public class ProcessorTest

{

public static void process(String clazz)

throws ClassNotFoundException

{

int passed = 0;

int failed = 0;

// 遍历clazz对应的类里的所有方法

for (Method m : Class.forName(clazz).getMethods())

{

// 如果该方法使用了@Testable修饰

if (m.isAnnotationPresent(Testable.class))

{

try

{

// 调用m方法

m.invoke(null);

// 测试成功,passed计数器加1

passed++;

}

catch (Exception ex)

{

System.out.println("方法" + m + "运行失败,异常:"

+ ex.getCause());

// 测试出现异常,failed计数器加1

failed++;

}

}

}

// 统计测试结果

System.out.println("共运行了:" + (passed + failed)

+ "个方法,其中:\n" + "失败了:" + failed + "个,\n"

+ "成功了:" + passed + "个!");

}

}

4 RunTests.java

public class RunTests

{

public static void main(String[] args)

throws Exception

{

// 处理MyTest类

ProcessorTest.process("MyTest");

}

}

四 运行

方法public static void MyTest.m7()运行失败,异常:java.lang.RuntimeException: 程序业务出现异常!

方法public static void MyTest.m3()运行失败,异常:java.lang.IllegalArgumentException: 参数出错了!

共运行了:4个方法,其中:

失败了:2个,

成功了:2个!

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值