JAVA高級進階13單元測試、反射、注解

第十三天、單元測試、反射、注解

單元測試

介紹

單元測試

  • 就是針對最小的功能單元(方法),編寫測試代碼對其進行正確性測試

咱們之前是如何進行單元測試的? 有啥問題 ?

  • 只能在main方法編寫測試代碼,去調用其他方法進行測試。

  • 無法實現自動化測試,一個方法測試失敗,可能影響其他方法的測試。

  • 無法得到測試的報告,需要程序員自己去觀察測試是否成功。

Junit單元測試框架

  • 可以用來對方法進行測試,它是由Junit公司開源出來的

優點

  • 可以靈活的編寫測試代碼,可以針對某個方法執行測試,也支持一鍵完成對全部方法的自動化測試,且各自獨立。

  • 不需要程序員去分析測試的結果,會自動生成測試報告出來。

Junit框架快捷入門

步驟 : Junit單元測試-快速入門

需求

  • 某個系統,有多個業務方法,請使用Junit單元測試框架,編寫測試代碼,完成對這些方法的正確性測試。

具體步驟

  • 將Junit框架的jar包導入到項目中

  • 為需要測試的業務類,定義對應的測試類,并為每個業務方法,編寫對應的測試方法(必須:公共、無參、無返回值)

  • 測試方法上必須聲明@Test注解,然后在測試方法中,編寫代碼調用被測試的業務方法進行測試

  • 開始測試:選中測試方法,右鍵選擇“JUnit運行” ,如果測試通過則是綠色;如果測試失敗,則是紅色

Junit框架的常見注解

Junit單元測試框架的常用注解(Junit 4.xxxx版本)

  • 在測試方法執行前執行的方法,常用于:初始化資源。

  • 在測試方法執行完后再執行的方法,常用于:釋放資源。

Junit單元測試框架的常用注解(Junit 5.xxxx版本)

  • 開始執行的方法:初始化資源

  • 執行完之后的方法:釋放資源

反射

認識反射、獲取類

反射(Reflection)

  • 反射就是:加載類,并允許以編程的方式解剖類中的各種成分(成員變量、方法、構造器等)。

反射學什么

反射第一步:加載類,獲取類的字節碼:Class對象

獲取Class對象的三種方式

  • 直接使用類名.class獲取:Class c1 = 類名.class

  • 調用Class提供的方法:Class c2 = Class.forName("全類名")

  • 調用Object提供的方法:Class c3 = 對象.getClass()

獲取類的構造器

獲取類的構造器、并對其進行操作

  • Class提供了從類中獲取構造器的方法。

獲取類構造器的作用:依然是初始化對象返回

獲取類的成員變量

獲取類的成員變量

  • Class提供了從類中獲取成員變量的方法。

獲取到成員變量的作用:依然是賦值、取值

獲取類的成員方法

獲取類的成員方法

  • Class提供了從類中獲取成員方法的API。

成員方法的作用:依然是執行

作用、應用場景

反射的作用?

  • 基本作用:可以得到一個類的全部成分然后操作。

  • 可以破壞封裝性。

  • 最重要的用途是:適合做Java的框架,基本上,主流的框架都會基于反射設計出一些通用的功能。

注解

快速入門

注解(Annotation)

  • 就是Java代碼里的特殊標記,比如:@Override、@Test等

  • 這些標記會被特定的注解解析器所發現,進而決定應該怎樣去編譯或者執行被注解標記出來的程序

自定義注解格式

  • //元注解
    public @interface 注解名稱 {
    }
    注解本質是一個接口,Java中所有注解都是繼承了Annotation接口的。

元注解

  • 指的是:修飾注解的注解,可以指定注解的標注位置和保留階段

  • @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface Test {
    }

注解解析

什么是注解的解析?

  • 就是判斷類上、方法上、成員變量上是否存在注解,并把注解里的內容給解析出來。

如何解析注解?

  • 指導思想:要解析誰上面的注解,就應該先拿到誰

  • 比如要解析類上面的注解,則應該先獲取該類的Class對象,再通過Class對象解析其上面的注解

  • 比如要解析成員方法上的注解,則應該獲取到該成員方法的Method對象,再通過Method對象解析其上面的注解

  • Class 、 Method 、 Field , Constructor、都實現了AnnotatedElement接口,它們都擁有解析注解的能力

注解屬性

注解屬性

  • 在定義注解的時候,還可以通過屬性來進一步描述注解的細節

  • public @interface 注解名稱 {
    public 屬性類型 屬性名() default 默認值 ;
    }

特殊屬性名: value

  • 如果注解中只有一個value屬性,使用注解時,value名稱可以不寫!!

Lombok

lombok

  • Lombok是一個實用的Java類庫,能通過注解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,并可以自動化生成日志變量,簡化java開發、提高效率。

注意事項

  • Lombok會在編譯時,自動生成對應的java代碼。我們使用lombok時,還需要安裝一個lombok的插件(idea自帶)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37722.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

頁面開發感想

頁面開發 1、 前端預覽 2、一些思路 2.1、首頁自定義element-plus的走馬燈 :deep(.el-carousel__arrow){border-radius: 0%;height: 10vh; }需要使用:deep(標簽)才能修改樣式 或者 ::v-deep 標簽 2.2、整體設計思路 <template><div class"card" style&…

【ChatBI】text2sql-不需要訪問數據表-超輕量Python庫Vanna快速上手,對接oneapi

oneapi 準備 首先確保你有oneapi &#xff0c;然后申請 kimi的api 需要去Moonshot AI - 開放平臺 然后添加一個api key 然后打開oneapi的渠道界面&#xff0c;添加kimi。 然后點擊 測試&#xff0c; 如果能生成響應時間&#xff0c;就是配置正確。 然后創建令牌 http:…

Vllm Offline 啟動

Vllm Offline 啟動 Vllm Offline 啟動&#xff0c;設置環境變量&#xff0c; TRANSFORMERS_OFFLINE1reference: https://github.com/vllm-project/vllm/discussions/1405

Linux shell編程學習筆記60:touch命令

0 前言 在csdn技能樹Linux入門的練習題中&#xff0c;touch是最常見的一條命令。這次我們就來研究它的用法。 1 touch命令的功能、格式和選項說明 我們可以使用touch --help命令查看touch命令的幫助信息。 [purpleendurer bash ~ ]touch --help Usage: touch [OPTION]... …

MATLAB-NGO-CNN-SVM,基于NGO蒼鷹優化算法優化卷積神經網絡CNN結合支持向量機SVM數據分類(多特征輸入多分類)

NGO-CNN-SVM&#xff0c;基于NGO蒼鷹優化算法優化卷積神經網絡CNN結合支持向量機SVM數據分類(多特征輸入多分類) 1.數據均為Excel數據&#xff0c;直接替換數據就可以運行程序。 2.所有程序都經過驗證&#xff0c;保證程序可以運行。 3.具有良好的編程習慣&#xff0c;程序均…

【Android面試八股文】Activity A跳轉B,B跳轉C,A不能直接跳轉到C,A如何傳遞消息給C?

文章目錄 1. 使用Intent傳遞消息2. 使用全局單例類(Singleton)3. 使用靜態變量4. 使用Application全局靜態變量5. 使用 Android系統剪切板(Clipboard)6. 本地化存儲方式6.1 使用SharedPreferences6.2 使用File文件存儲方式傳遞消息6.3 使用SQLite數據庫方式傳遞消息7. 使用廣…

【Spring Boot】Java 的數據庫連接模板:JDBCTemplate

Java 的數據庫連接模板&#xff1a;JDBCTemplate 1.JDBCTemplate 初識1.1 JDBC1.2 JDBCTemplate 2.JDBCTemplate 實現數據的增加、刪除、修改和查詢2.1 配置基礎依賴2.2 新建實體類2.3 操作數據2.3.1 創建數據表2.3.2 添加數據2.3.3 查詢數據2.3.4 查詢所有記錄2.3.5 修改數據2…

【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 運行

isarsoft / yolov4-triton-tensorrt運行發現插件未注冊? 【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 【ai】tx2 nx: jetson Triton Inference Server 運行YOLOv4 對main 進行了重新構建 【ai】tx2 nx :ubuntu查找NvInfer.h 路徑及哪個包、查找符號【ai】tx2…

深度學習實戰81-基于大模型的Chatlaw法律問答中的知識圖譜融合思路,數據集說明、以及知識圖譜對ChatLaw的影響介紹

大家好,我是微學AI,今天給大家介紹一下深度學習實戰81-基于大模型的Chatlaw法律問答中的知識圖譜融合思路,數據集說明、以及知識圖譜對ChatLaw的影響介紹。基于大模型的Chatlaw法律問答系統融合了知識圖譜,以提高法律咨詢服務的可靠性和準確性。Chatlaw通過結合知識圖譜與人…

AES加密算法及AES-CMAC原理白話版系統解析

本文框架 前言1. AES加密理論1.1 不同AES算法區別1.2 加密過程介紹1.2.1 加密模式和填充方案選擇1.2.2 密鑰擴展1.2.3分組處理1.2.4多輪加密1.2.4.1字節替換1.2.4.2行移位1.2.4.3列混淆1.2.4.4輪密鑰加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…

redis 單節點數據如何平滑遷移到集群中

目的 如何把一個redis單節點的數據遷移到 redis集群中 方案&#xff1a; 使用命令redis-cli --cluster import 導入數據至集群 --cluster-from <arg>--cluster-from-user <arg> 數據源用戶--cluster-from-pass <arg> 數據源密碼--cluster-from-askpass--c…

css_22_過渡動畫

一.過渡 transition-property 作用&#xff1a;定義哪個屬性需要過渡。結構&#xff1a; transition-property: all; 常用值&#xff1a; 1.none&#xff1a;不過渡任何屬性。 2.all&#xff1a;過渡所有能過渡的屬性。 3&#xff0e;具體某個屬性名&#xff0c;例如&#xf…

駕校預約小程序系統的設計

管理員賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;學員管理&#xff0c;教練管理&#xff0c;駕校信息管理&#xff0c;駕校車輛管理&#xff0c;教練預約管理&#xff0c;考試信息管理 微信端賬號功能包括&#xff1a;系統首頁&#xff0c;駕校信息&a…

Java基礎——五、繼承

五、繼承 簡要 1、說明 繼承(Inheritance)是面向對象編程(OOP)的一個核心概念&#xff0c;它允許一個類(子類)繼承另一個類(父類)的屬性和方法&#xff0c;從而實現代碼重用和結構化組織。通過繼承&#xff0c;子類可以擴展父類的功能或者對父類的方法進行重寫。 父類(超類…

基于docker安裝redis服務

Redis是我們在項目中經常需要使用的緩存數據庫&#xff0c;安裝redis的方式也有很多&#xff0c;本文主要是給大家講解如何基于docker進行redis服務的安裝&#xff0c;主要介紹&#xff0c;如何拉取redis鏡像、如何掛載redis的數據以及使用redis的配置文件和開啟認證等功能&…

steam社區載入失敗、加載不出來、打不開?

隨著steam夏季大促的到來&#xff0c;最近steam在線用戶越來越多了&#xff0c;很多玩家在自己喜歡的游戲社區里看最新的玩法、攻略和玩家的游戲心得。不過有不少玩家表示有時候會打不開游戲社區或是社區加載失敗等問題。根據大家遇到的問題&#xff0c;這里總結了幾種解決方法…

構建現代醫療:互聯網醫院系統源碼與電子處方小程序開發教學

本篇文章&#xff0c;筆者將探討互聯網醫院系統的源碼結構和電子處方小程序的開發&#xff0c;幫助讀者更好地理解和掌握這些前沿技術。 一、互聯網醫院系統源碼結構 互聯網醫院系統通常由多個模塊組成&#xff0c;每個模塊負責不同的功能。以下是一個典型的互聯網醫院系統的主…

基于C語言的Jacobi迭代和Gauss-Seidel迭代的方程組求解實現

文章目錄 Jacobi迭代方法介紹Gauss-Seidel迭代方法介紹具體代碼實現示例題目實現效果 Jacobi迭代方法介紹 Jacobi迭代法是一種簡單的迭代求解方法&#xff0c;適用于嚴格對角占優矩陣。其基本思想是利用當前迭代步的已知解來更新下一個迭代步的解。在C語言實現中&#xff0c;我…

商協會小程序如何提升商協會形象?

商協會小程序在提升商協會形象方面扮演著重要角色。以下是關于商協會小程序如何提升商協會形象的一些場景分析&#xff1a; 1、數字化名片與品牌形象展示 小程序可以作為商協會的數字名片&#xff0c;通過展示商會文化、活動信息和會員服務&#xff0c;有效提升商會的品牌形象…

鏈表反轉的兩種方式

鏈表反轉的兩種方式 1.頭插法 先創建一個新的鏈表&#xff0c;然后不斷遍歷我們想要反轉的鏈表&#xff0c;再一個一個使用頭插法插入到我們新建立的鏈表中&#xff0c;這樣鏈表就倒置了。 LinkList Reverse(LinkList re) {LinkList n;n (LinkList)malloc(sizeof(LNode));n…