1. 程式人生 > 程式設計 >Java使用自定義註解實現函式測試功能示例

Java使用自定義註解實現函式測試功能示例

本文例項講述了Java使用自定義註解實現函式測試功能。分享給大家供大家參考,具體如下:

一 自定義註解

  • 使用@interface定義Annotation
  • 使用Annotation修飾程式中的類、方法、變數、介面等定義,通常我們會把Annotation放在所有修飾符之前。
  • 定義帶成員變數的Annotation。
  • 為Annotation的成員變數指定初始值。

二 提取Annotation

Annotation介面來代表程式元素前面的註釋,該介面是所有Annotation型別的父介面。

AnnotatedElement介面代表程式中可以接受註釋的程式元素。

呼叫AnnotatedElement物件的如下三個方法來訪問Annotation資訊:

  • getAnnotation(Class<T> 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程式設計有所幫助。