怎么在Java中通過(guò)自定義注解實(shí)現(xiàn)一個(gè)函數(shù)測(cè)試功能

怎么在Java中通過(guò)自定義注解實(shí)現(xiàn)一個(gè)函數(shù)測(cè)試功能?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

惠陽(yáng)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),惠陽(yáng)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為惠陽(yáng)成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的惠陽(yáng)做網(wǎng)站的公司定做!

一 自定義注解

  • 使用@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è)!

看完上述內(nèi)容,你們掌握怎么在Java中通過(guò)自定義注解實(shí)現(xiàn)一個(gè)函數(shù)測(cè)試功能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文題目:怎么在Java中通過(guò)自定義注解實(shí)現(xiàn)一個(gè)函數(shù)測(cè)試功能
當(dāng)前網(wǎng)址:http://www.muchs.cn/article24/piejce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)網(wǎng)站制作、域名注冊(cè)、App設(shè)計(jì)靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名