Java使用自定義注解實(shí)現(xiàn)函數(shù)測(cè)試功能示例
本文實(shí)例講述了Java使用自定義注解實(shí)現(xiàn)函數(shù)測(cè)試功能。分享給大家供大家參考,具體如下:
一 自定義注解
- 使用@interface定義Annotation
- 使用Annotation修飾程序中的類(lèi)、方法、變量、接口等定義,通常我們會(huì)把Annotation放在所有修飾符之前。
- 定義帶成員變量的Annotation。
- 為Annotation的成員變量指定初始值。
二 提取Annotation
Annotation接口來(lái)代表程序元素前面的注釋?zhuān)摻涌谑撬蠥nnotation類(lèi)型的父接口。
AnnotatedElement接口代表程序中可以接受注釋的程序元素。
調(diào)用AnnotatedElement對(duì)象的如下三個(gè)方法來(lái)訪問(wèn)Annotation信息:
- getAnnotation(Class<T> annotationClass):返回該程序元素上存在的、指定類(lèi)型的注釋?zhuān)绻擃?lèi)型的注釋不存在,則返回null。
- Annotation[] getAnnotations():返回該程序元素上存在的所有注釋。
- boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):判斷該程序元素上是否包含指定類(lèi)型的注釋?zhuān)嬖趧t返回true,否則返回false。
三 實(shí)戰(zhàn)——標(biāo)記哪些方法是可測(cè)試的
1 Testable.java
import java.lang.annotation.*; // 使用JDK的元數(shù)據(jù)Annotation:Retention @Retention(RetentionPolicy.RUNTIME) // 使用JDK的元數(shù)據(jù)Annotation:Target @Target(ElementType.METHOD) // 定義一個(gè)標(biāo)記注解,不包含任何成員變量,即不可傳入元數(shù)據(jù) public @interface Testable { }
2 MyTest.java
public class MyTest { // 使用@Testable注解指定該方法是可測(cè)試的 @Testable public static void m1() { } public static void m2() { } // 使用@Testable注解指定該方法是可測(cè)試的 @Testable public static void m3() { throw new IllegalArgumentException("參數(shù)出錯(cuò)了!"); } public static void m4() { } // 使用@Testable注解指定該方法是可測(cè)試的 @Testable public static void m5() { } public static void m6() { } // 使用@Testable注解指定該方法是可測(cè)試的 @Testable public static void m7() { throw new RuntimeException("程序業(yè)務(wù)出現(xiàn)異常!"); } 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對(duì)應(yīng)的類(lèi)里的所有方法 for (Method m : Class.forName(clazz).getMethods()) { // 如果該方法使用了@Testable修飾 if (m.isAnnotationPresent(Testable.class)) { try { // 調(diào)用m方法 m.invoke(null); // 測(cè)試成功,passed計(jì)數(shù)器加1 passed++; } catch (Exception ex) { System.out.println("方法" + m + "運(yùn)行失敗,異常:" + ex.getCause()); // 測(cè)試出現(xiàn)異常,failed計(jì)數(shù)器加1 failed++; } } } // 統(tǒng)計(jì)測(cè)試結(jié)果 System.out.println("共運(yùn)行了:" + (passed + failed) + "個(gè)方法,其中:\n" + "失敗了:" + failed + "個(gè),\n" + "成功了:" + passed + "個(gè)!"); } }
4 RunTests.java
public class RunTests { public static void main(String[] args) throws Exception { // 處理MyTest類(lèi) ProcessorTest.process("MyTest"); } }
四 運(yùn)行
方法public static void MyTest.m7()運(yùn)行失敗,異常:java.lang.RuntimeException: 程序業(yè)務(wù)出現(xiàn)異常!
方法public static void MyTest.m3()運(yùn)行失敗,異常:java.lang.IllegalArgumentException: 參數(shù)出錯(cuò)了!
共運(yùn)行了:4個(gè)方法,其中:
失敗了:2個(gè),
成功了:2個(gè)!
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
關(guān)于.java編譯成.class?與?.class反編譯成.java問(wèn)題
這篇文章主要介紹了關(guān)于.java編譯成.class?與?.class反編譯成.java問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Spring 應(yīng)用中集成 Apache Shiro的方法
這篇文章主要介紹了Spring 應(yīng)用中集成 Apache Shiro的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解
這篇文章主要介紹了Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09Java gRPC攔截器簡(jiǎn)單實(shí)現(xiàn)分布式日志鏈路追蹤器過(guò)程詳解
有請(qǐng)求的發(fā)送、處理,當(dāng)然就會(huì)有攔截器的需求,例如在服務(wù)端通過(guò)攔截器統(tǒng)一進(jìn)行請(qǐng)求認(rèn)證等操作,這些就需要攔截器來(lái)完成,今天松哥先和小伙伴們來(lái)聊一聊gRPC中攔截器的基本用法,后面我再整一篇文章和小伙伴們做一個(gè)基于攔截器實(shí)現(xiàn)的JWT認(rèn)證的gRPC2023-03-03springMvc和mybatis-plus中枚舉值和字段的映射
這篇文章主要為大家介紹了springMvc和mybatis-plus中枚舉值和字段的映射示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05深入了解Java SpringBoot自動(dòng)裝配原理
在使用springboot時(shí),很多配置我們都沒(méi)有做,都是springboot在幫我們完成,這很大一部分歸功于springboot自動(dòng)裝配。本文將詳細(xì)為大家講解SpringBoot的自動(dòng)裝配原理,需要的可以參考一下2022-03-03SQL Server 2000 Driver for JDBC Service Pack 3 安裝測(cè)試方法
這篇文章主要介紹了數(shù)據(jù)庫(kù)連接測(cè)試程序(SQL Server 2000 Driver for JDBC Service Pack 3 安裝測(cè)試),需要的朋友可以參考下2014-10-10