最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用自定義注解實(shí)現(xiàn)函數(shù)測(cè)試功能示例

 更新時(shí)間:2019年10月21日 08:42:22   作者:cakincqm  
這篇文章主要介紹了Java使用自定義注解實(shí)現(xiàn)函數(shù)測(cè)試功能,結(jié)合實(shí)例形式分析了java自定義注解在函數(shù)測(cè)試過程中相關(guān)功能、原理與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Java使用自定義注解實(shí)現(xiàn)函數(shù)測(cè)試功能。分享給大家供大家參考,具體如下:

一 自定義注解

  • 使用@interface定義Annotation
  • 使用Annotation修飾程序中的類、方法、變量、接口等定義,通常我們會(huì)把Annotation放在所有修飾符之前。
  • 定義帶成員變量的Annotation。
  • 為Annotation的成員變量指定初始值。

二 提取Annotation

Annotation接口來代表程序元素前面的注釋,該接口是所有Annotation類型的父接口。

AnnotatedElement接口代表程序中可以接受注釋的程序元素。

調(diào)用AnnotatedElement對(duì)象的如下三個(gè)方法來訪問Annotation信息:

  • getAnnotation(Class<T> annotationClass):返回該程序元素上存在的、指定類型的注釋,如果該類型的注釋不存在,則返回null。
  • Annotation[] getAnnotations():返回該程序元素上存在的所有注釋。
  • boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):判斷該程序元素上是否包含指定類型的注釋,存在則返回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)的類里的所有方法
   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類
   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)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目實(shí)踐

    SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目實(shí)踐

    SpringBoot項(xiàng)目結(jié)構(gòu)遵循Maven或Gradle的標(biāo)準(zhǔn)目錄結(jié)構(gòu),融入了SpringBoot的特定約定,本文就來介紹一下SpringBoot中項(xiàng)目結(jié)構(gòu)的項(xiàng)目,感興趣的可以了解一下
    2025-03-03
  • SpringBoot指定激活配置文件的方法

    SpringBoot指定激活配置文件的方法

    Spring Boot 對(duì)多環(huán)境整合已經(jīng)有了很好的支持,能夠在運(yùn)行間、打包時(shí)自由切換環(huán)境,這篇文章主要介紹了SpringBoot指定激活配置文件,需要的朋友可以參考下
    2023-11-11
  • springboot中的controller注意事項(xiàng)說明

    springboot中的controller注意事項(xiàng)說明

    這篇文章主要介紹了springboot中的controller注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java開啟線程的四種方法案例詳解

    Java開啟線程的四種方法案例詳解

    這篇文章主要介紹了Java開啟線程的四種方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 使用Java 8 Lambda表達(dá)式將實(shí)體映射到DTO的操作

    使用Java 8 Lambda表達(dá)式將實(shí)體映射到DTO的操作

    這篇文章主要介紹了使用Java 8 Lambda表達(dá)式將實(shí)體映射到DTO的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • JAVA加密算法實(shí)密鑰一致協(xié)議代碼示例

    JAVA加密算法實(shí)密鑰一致協(xié)議代碼示例

    這篇文章主要介紹了JAVA加密算法實(shí)密鑰一致協(xié)議代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • jdk15的安裝與配置全過程記錄

    jdk15的安裝與配置全過程記錄

    這篇文章主要給大家介紹了關(guān)于jdk15的安裝與配置,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 如何解決IDEA git拉取代碼后本地代碼莫名消失的問題

    如何解決IDEA git拉取代碼后本地代碼莫名消失的問題

    這篇文章主要介紹了如何解決IDEA git拉取代碼后本地代碼莫名消失的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng)

    Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng)

    對(duì)于不需要任何準(zhǔn)確計(jì)算精度的數(shù)字可以直接使用float或double,但是如果需要精確計(jì)算的結(jié)果,則必須使用BigDecimal類,而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作,下面這篇文章給大家介紹了Java中BigDecimal的加減乘除、比較大小與使用注意事項(xiàng),需要的朋友可以參考下。
    2017-11-11
  • Open?Feign之非SpringCloud方式使用示例

    Open?Feign之非SpringCloud方式使用示例

    這篇文章主要為大家介紹了Open?Feign之非SpringCloud方式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評(píng)論

黑河市| 册亨县| 余姚市| 水城县| 建水县| 象山县| 武平县| 洮南市| 济宁市| 神池县| 开江县| 徐汇区| 公主岭市| 阳朔县| 肥东县| 辽源市| 通渭县| 宁陵县| 都兰县| 荣昌县| 竹北市| 鄂伦春自治旗| 威宁| 韶山市| 永新县| 威远县| 和静县| 东台市| 宜黄县| 大方县| 亚东县| 集贤县| 民乐县| 穆棱市| 芷江| 庆城县| 双鸭山市| 合江县| 新安县| 新干县| 三门县|