Java使用自定義注解實現(xiàn)函數(shù)測試功能示例
本文實例講述了Java使用自定義注解實現(xiàn)函數(shù)測試功能。分享給大家供大家參考,具體如下:
一 自定義注解
- 使用@interface定義Annotation
- 使用Annotation修飾程序中的類、方法、變量、接口等定義,通常我們會把Annotation放在所有修飾符之前。
- 定義帶成員變量的Annotation。
- 為Annotation的成員變量指定初始值。
二 提取Annotation
Annotation接口來代表程序元素前面的注釋,該接口是所有Annotation類型的父接口。
AnnotatedElement接口代表程序中可以接受注釋的程序元素。
調(diào)用AnnotatedElement對象的如下三個方法來訪問Annotation信息:
- getAnnotation(Class<T> annotationClass):返回該程序元素上存在的、指定類型的注釋,如果該類型的注釋不存在,則返回null。
- Annotation[] getAnnotations():返回該程序元素上存在的所有注釋。
- boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):判斷該程序元素上是否包含指定類型的注釋,存在則返回true,否則返回false。
三 實戰(zhàn)——標記哪些方法是可測試的
1 Testable.java
import java.lang.annotation.*;
// 使用JDK的元數(shù)據(jù)Annotation:Retention
@Retention(RetentionPolicy.RUNTIME)
// 使用JDK的元數(shù)據(jù)Annotation:Target
@Target(ElementType.METHOD)
// 定義一個標記注解,不包含任何成員變量,即不可傳入元數(shù)據(jù)
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("參數(shù)出錯了!");
}
public static void m4()
{
}
// 使用@Testable注解指定該方法是可測試的
@Testable
public static void m5()
{
}
public static void m6()
{
}
// 使用@Testable注解指定該方法是可測試的
@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對應(yīng)的類里的所有方法
for (Method m : Class.forName(clazz).getMethods())
{
// 如果該方法使用了@Testable修飾
if (m.isAnnotationPresent(Testable.class))
{
try
{
// 調(diào)用m方法
m.invoke(null);
// 測試成功,passed計數(shù)器加1
passed++;
}
catch (Exception ex)
{
System.out.println("方法" + m + "運行失敗,異常:"
+ ex.getCause());
// 測試出現(xiàn)異常,failed計數(shù)器加1
failed++;
}
}
}
// 統(tǒng)計測試結(jié)果
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: 程序業(yè)務(wù)出現(xiàn)異常!
方法public static void MyTest.m3()運行失敗,異常:java.lang.IllegalArgumentException: 參數(shù)出錯了!
共運行了:4個方法,其中:
失敗了:2個,
成功了:2個!
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
SpringBoot中項目結(jié)構(gòu)的項目實踐
SpringBoot項目結(jié)構(gòu)遵循Maven或Gradle的標準目錄結(jié)構(gòu),融入了SpringBoot的特定約定,本文就來介紹一下SpringBoot中項目結(jié)構(gòu)的項目,感興趣的可以了解一下2025-03-03
使用Java 8 Lambda表達式將實體映射到DTO的操作
這篇文章主要介紹了使用Java 8 Lambda表達式將實體映射到DTO的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java中BigDecimal的加減乘除、比較大小與使用注意事項
對于不需要任何準確計算精度的數(shù)字可以直接使用float或double,但是如果需要精確計算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進行大數(shù)的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項,需要的朋友可以參考下。2017-11-11

