Java使用自定义注解实现函数测试功能示例

网友投稿 300 2022-12-24


Java使用自定义注解实现函数测试功能示例

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

一 自定义注解

使用@interface定义Annotation

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

定义带成员变量的Annotation。

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

二 提取Annotation

Ahttp://nnotation接口来代表程序元素前面的注释,该接口是所有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 ExceptiXMSSZCJXQon

{

// 处理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程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java多线程按指定顺序同步执行
下一篇:Spring Boot自动注入的原理分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~