Java單元測試和設計模式

單元測試

.

測試分類

什么是測試?

測試的目的是盡可能多的發現軟件中存在的BUG,而不是為了隱藏BUG。事實上測試有很多種類,比如:邊界測試,壓力測試,性能測試等

黑盒測試

黑盒測試也叫功能測試,主要關注軟件每個功能是否實現,并不關注軟件代碼是否有錯誤;測試人員完全不考慮程序內部的邏輯結構和內部特性;任何人都可以做,把程序交給測試人員,到處隨便點,看程序是否出錯

白盒測試

白盒測試與黑盒測試相反,白盒測試主要檢查軟件內部邏輯結構、設計等是否符合規定;該測試人員要看懂別人寫的代碼,看懂之后,自己寫一份代碼測試別人寫的代碼

灰盒測試

灰盒測試是介于黑盒和白盒之間的一種測試,既關注功能也關注內部邏輯的實現,但并沒有白盒測試那么細致;需要灰盒測試的目的是因為白盒測試效率較低

單元測試

(模塊測試)是開發者編寫的一小段代碼,用于檢驗被測代碼的一個很小的、很明確的功能是否正確;比如一個方法是否正確,比如是否達到想要的效果等;這也是我們開發者最常用的一種方式;就程序員做自測用的

單元測試語法結構

public class Junit4Test {@Testpublic void xxxTest(){}
}

該測試語法注意事項

  1. 訪問權限修飾符必須是public修飾
  2. 返回值類型必須是void
  3. 方法形參列表必須為空
  4. 一個類中可以有多個@Test方法,可單獨或全部運行

單元測試常見的注解

A、@Before:它在執行@Test對應的方法之前執行

B、@Test:執行目標方法

C、@After:它在執行@Test對應的方法之后執行

public class Junit4Test {//一般用于關閉資源@Afterpublic void xxxAfter(){System.out.println("After");}@Testpublic void xxxTest(){//實際開發中:初始化+核心代碼+關閉資源,都可以放這里面System.out.println("Test");}//一般用于初始化@Beforepublic void xxxBefore(){System.out.println("Before");}*** 執行優先順序結果:* Before* Test* After*/
}

單元測試的作用

一個類里面可以當多個main方法用,讓程序更加健壯安全

自定義工具類

如何寫自定義工具類?對比Arrays和Collections工具類的共性,可以看出相對規則:

①、不能讓外部類實例化工具類【無構造方法,也就是private修飾的構造方法】

②、該類中的方法都是靜態的【用static修飾的方法】

模擬實例——自定義工具類

/*** 自定義工具類* 		滿足上面的相對規則條件*/
public class CustomUtilityClass {//私有構造private CustomUtilityClass(){}//判斷該字符串是否為空并且長度為0,true為空,false不為空public static Boolean isNull(String str){if (str == null || ("".equals(str.trim()) && str.length() == 0)){return true;}return false;}
}

使用自定義的工具類

public class Junit4Test {@Testpublic void xxxTest(){Boolean xX = CustomUtilityClass.isNull(" ");//這里長度不為0,所以falseSystem.out.println(xX);//false}
}

自定義生成jar包——導入/導出

簡單理解jar包就是字節碼的集合包【裝的全是.class】

生成jar包,導出:

第一步:Project Structure->Artifacts->Add(+號)->JAR->From modules with depen…

在這里插入圖片描述
在這里插入圖片描述

From modules with depen…是自定義或全部項目

第二步:Main Class,其它不用改動

在這里插入圖片描述
在這里插入圖片描述
一般把項目名下存放jar包文件存放的文件夾名字用lib

第三步:Build->Build Artifacts

在這里插入圖片描述
在這里插入圖片描述

導入,使用生成的jar包:

在這里插入圖片描述

在這里插入圖片描述
點擊"Add as Library…" 產生關聯之后,jar是能打開的,如果沒有關聯是打不開的

在這里插入圖片描述
因為這里是同一個項目,打成jar包之后,這里把CustomUtilityClass類刪了,然后直接在測試類中,CustomUtilityClass點方法,直接就可以用

在這里插入圖片描述

PS:點擊"Add as Library…" 產生關聯之后,刪除關聯

在這里插入圖片描述

PS:打jar錯了,這里直接刪除,再手動刪除打jar生成的位置

在這里插入圖片描述
在這里插入圖片描述

設計模式

最主要的設計模式——單例模式【三種創建方式】

單:一個

例:實例

模式:一種結構

單例模式:請設計一種結構只能創建一個對象,創建對象的個數必須有且僅有一個

單例模式之——餓漢模式【優勢:會主動創建對象,因為static修飾的,類加載時會被執行】

A、私有化構造方法【才能防止外部類隨意new對象】

B、提供一個對象,該對象被private static final 修飾,確保唯一

C、提供一個公共靜態的方法,用于返回對象 【靜態區域只能訪問靜態成員】

PS:跟Runtime類如出一轍

在這里插入圖片描述

模仿——單例模式之餓漢模式

/*** 單例模式——餓漢模式*/
public class HungryManMode {//第二步:私有構造之后,外部類一個對象也創建不了,就需要當前類創建對象private static final HungryManMode hungry = new HungryManMode

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

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

相關文章

UOS統信桌面系統解決編譯錯誤:C compiler cc is not found指南

一、系統環境 1.操作系統版本2.編譯環境 PC:~$ gcc --version gcc (Uos 8.3.0.13-deepin1) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY o…

深入理解 Docker 容器網絡:為什么用 host 網絡模式能解決連通性問題?

Docker 已經成為現代應用部署的標配,大家都知道它的網絡隔離做得很好,既安全又靈活。不過,在實際用 Docker 部署服務的過程中,相信很多人都遇到過這樣的情況:主機上能連通的外部服務,一到容器里卻死活連不上…

Spring Boot 異常處理:從全局捕獲到優化用戶體驗!

全文目錄:開篇語**前言****1. Spring Boot 異常處理的基本概念****2. 使用 ExceptionHandler 局部處理異常****示例:局部異常處理****優化建議:****3. 使用 ControllerAdvice 和 RestControllerAdvice 進行全局異常處理****示例:全…

vue3.0 + TypeScript 中使用 axios 同時進行二次封裝

項目背景是vite搭建的vue3.0 TypeScript 的項目,需要統一處理和統一維護就對axios進行了二次封裝 axios的安裝 npm install axios定義http文件夾然后內部定義index.ts文件,內部開始封裝 import axios, {type AxiosInstance} from "axios";…

ESP32- 項目應用1 音樂播放器之sd的驅動配置 #1

音樂播放器 ESP32- 項目應用1 音樂播放器之sd的驅動配置 #1 文章目錄 音樂播放器 1 sd卡介紹 1.1 SDCARD介紹 1.2 物理結構 1.3 協議說明 1.4 sd 卡模式 1.5 數據模式 1.6 sdio 初始化流程 1.7 SPI 模式下的 SD 卡初始化 2 原理圖 2.1 sd原理圖 2.2 esp32的接口 3 代碼配置 3.…

Vue.js 指令系統完全指南:深入理解 v- 指令

Vue.js 的指令系統是其最強大的特性之一,通過以 v- 開頭的特殊屬性,我們可以在模板中聲明式地綁定底層Vue實例的數據。本文將深入講解Vue中最重要的指令,幫助掌握Vue的核心功能。 文章目錄1. v-model:雙向數據綁定的核心基本用法修…

計算機分類匯總大全

前端部分有 Node.js、ActionScript、Swift、TypeScript、Webpack、JavaScript。需要分別詳細說明它們的定義、特點、應用場景、優缺點等。比如 Node.js,要提到它的運行環境、事件驅動、非阻塞 I/O,適合的應用如 API 服務、實時應用,以及常用框…

模擬鏈路濾波器設計一些細節

目錄 原設計思路剖析 300M帶寬仿真與計算 原設計思路剖析 濾波器設計的一些細節,以下為ADS54J60模擬鏈路的一些問題設計原理圖 實際電路設計如上所示,但是實際bom并未按此設計,根據實際的BOM明細以及ADC使用說明書,可以間接理解原設計者的設計初衷,是將ADC的一部分特性…

CatBoost 完整解析:類別特征友好的梯度提升框架

1?? 什么是 CatBoost?CatBoost(Categorial Boosting)是由 Yandex(俄羅斯搜索引擎公司)開源的梯度提升框架,專為類別特征處理優化。核心特點:無需手動 one-hot / LabelEncoding,原生…

NDBmysql-cluster集群部署腳本

NDB(Network Database)是MySQL Cluster的核心存儲引擎,專為高可用性、高吞吐量、分布式數據存儲設計,采用內存計算+磁盤持久化架構,支持跨節點數據分片與自動冗余,適用于對實時性和可靠性要求嚴苛的業務場景(如金融交易、電信計費、實時分析等)。 今天大白鼠就分享構建…

計算機網絡中的socket是什么?編程語言中的socket編程又是什么?python的socket編程又該如何用?

1. 計算機網絡中的 Socket 是什么? 想象一下電話系統: 電話插座 (Socket): 是墻上的一個物理接口,它本身不是通話,但它是建立通話連接的端點。你需要把電話線插進插座才能打電話。通話 (Connection): 是兩臺…

【科普】進程與線程的區別

一、定義與概念:進程:進程是執行中的一段程序。一旦程序被載入到內存中并準備執行,就變成了一個進程。進程是表示資源分配的基本概念,又是調度運行的基本單位,是系統中的并發執行的單位。線程:線程是進程中…

Conda創建虛擬環境,解決不同項目的沖突!

隨著需求的增多,又要增加多幾個不同的項目來在本地測試,這個時候往往就會遇到 不同項目的Python版本不同等等一系列問題,只好請出Conda來幫忙。 一、先去下載安裝一下Conda Conda | Anaconda.org 安裝完后,需要給CONDA做個環境變…

RK3568下的進程間廣播通信:用C語言構建簡單的中心服務器

最近的項目中需要實現這樣一個功能,就是一個進程A發消息,進程B和進程C都能收到相同的消息,同樣,進程B發消息,進程A和進程C也都能收到消息,就像下圖中的描述。 使用一個中心服務器作為消息轉發樞紐,所有客戶端連接到服務器,發送消息到服務器后,服務器再將消息轉發給所有…

激光雷達/相機一體機 時間同步和空間標定(1)

一、參考鏈接 海康威視、LIVOX與PTP時間同步_海康相機ptp同步-CSDN博客 基于PTP實現主機與相機系統時鐘同步功能_ptp同步-CSDN博客

嵌入式系統的中斷控制器(NVIC)

1. NVIC的核心功能 核心價值:NVIC通過硬件級中斷管理、自動狀態處理及低延遲優化,為實時系統提供確定性響應,是Cortex-M芯片實時性的基石。 中斷優先級管理 支持多級可編程優先級(通常4-8位,如STM32用4位實現16級優先級…

【源力覺醒 創作者計劃】2025年國產AI模型深度測評:文心大模型4.5、DeepSeek、Qwen3能力大比拼

文章目錄引言:AI大模型的新時代一、模型架構與技術生態對比1. 文心大模型4.5系列2. DeepSeek3. 通義千問(Qwen 3.0)二、語言理解能力實測2.1 情感分析測試2.1.1 文心一言的表現2.1.2 DeepSeek的表現2.1.3 Qwen 3.0的表現2.1.4 測試結果分析2.…

從C++0基礎到C++入門(第十五節:switch語句)

一. switch語句1.1 語法結構如下:switch (表達式) {case 常量1:// 代碼塊1break;case 常量2:// 代碼塊2break;default:// 默認代碼塊 }1.2 注意 :表達式必須是整型或枚舉類型(如int、char)。case后的常量必須與表達式類型兼容。學…

編程與數學 03-002 計算機網絡 16_網絡編程基礎

編程與數學 03-002 計算機網絡 16_網絡編程基礎一、網絡編程的基本概念(一)客戶端與服務器模型(二)套接字(Socket)編程的基本原理二、基于TCP的網絡編程(一)TCP套接字的創建與使用&a…

在純servlet項目中,使用@WebFilter定義了多個filter,如何設置filter的優先級

在純 Servlet 項目中,WebFilter 注解本身并不提供直接的屬性來設置過濾器的優先級(如過濾器執行的順序)。但是,你可以通過以下幾種方式來控制過濾器的執行順序:1. 通過 web.xml 配置過濾器的順序在 web.xml 中&#xf…