軟件測試:1、單元測試

1. 單元測試的基本概念

  • 單元(Unit):軟件系統的基本組成單位,可以是函數、模塊、方法或類。

  • 單元測試(Unit Testing):對軟件單元進行的測試,驗證代碼的正確性、規范性、安全性和性能。

  • 特點

    • 單元相互獨立,互不影響。

    • 及時發現代碼缺陷,降低糾錯成本。

    • 主要由程序員負責,測試員輔助。

    • 可并行開展。

    • 依據《軟件詳細規格說明書》。

    • 以代碼覆蓋率作為評估標準。

    • 需要開發輔助的測試程序。

2. 動態測試

  • 驅動程序(Driver):模擬被測模塊的上級模塊,調用被測模塊并傳遞測試數據。

  • 樁程序(Stub):模擬被測模塊調用的下層模塊,便于檢查接口。

  • 示例:某程序將攝氏溫度轉換為華氏溫度,測試GUI模塊時需要配置驅動模塊和樁模塊。

3. 自動化單元測試框架JUnit

  • JUnit簡介

    • 針對Java語言的單元測試框架,1997年由Erich Gamma和Kent Beck開發。

    • JUnit4對測試框架體系結構進行了重大調整,與JUnit3有較大不同。

    • JUnit的設計思想被抽象為xUnit框架,已移植到多種語言和環境中。

  • 技術特點

    • 簡化測試代碼編寫。

    • 測試代碼與產品代碼分離。

    • 測試代碼可自動運行。

    • 提供豐富的斷言方法。

    • 支持固化方法(資源分配和釋放)。

    • 可將測試用例組織成測試套件。

    • 支持文本和圖形運行界面。

4. JUnit的測試類和測試方法

  • 測試類:包含測試代碼,定義一組測試方法。

  • 測試方法:需滿足以下條件:

    • 方法名用@Test注解修飾。

    • 必須用public void修飾。

    • 不帶任何參數。

  • 示例

    java復制

    @Test
    public void test01() throws Exception {isu = new InsuredPerson(20, 'M', false);int p = isu.premium();assertEquals(600, p);
    }

5. JUnit的斷言(Assertion)

  • 常用斷言方法:

    • assertEquals(expected, actual):判斷預期結果與實際結果是否相同。

    • assertArrayEquals(expected, actuals):判斷數組是否相同。

    • assertSame(expected, actual):判斷是否引用相同對象。

    • assertTrue(condition):判斷條件是否為真。

    • assertNull(obj):判斷對象是否為空。

    • fail():直接指示測試失敗。

6. JUnit的固化方法(Fixture)

  • 固化方法:用于分配和釋放資源。

    • @BeforeClass:類構造固化方法,測試前調用一次。

    • @AfterClass:類析構固化方法,測試后調用一次。

    • @Before:構造固化方法,每次執行測試方法前調用。

    • @After:析構固化方法,每次執行測試方法后調用。

  • 示例

    java復制

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {System.out.println("setUpBeforeClass");
    }
    @AfterClass
    public static void tearDownAfterClass() throws Exception {System.out.println("tearDownAfterClass");
    }
    @Before
    public void setUp() throws Exception {System.out.println("setUp");
    }
    @After
    public void tearDown() throws Exception {System.out.println("tearDown");
    }

7. 參數化測試

  • 參數化測試:將測試用例集組織在一個線性表中,JUnit框架遍歷線性表,每次取出一條測試用例作為參數實例化一個測試類對象。

  • 參數化測試類的特征

    • @RunWith(Parameterized.class)注解修飾。

    • 定義一個存儲測試用例的數據域集合。

    • 定義一個以測試用例為參數的構造方法。

    • 定義一個靜態方法(用@Parameters注解修飾),返回測試用例線性表。

    • 定義至少一個測試方法。

8. 異常測試和超時測試

  • 異常測試:通過@Test(expected = 異常類.class)指定預期異常。

    java復制

    @Test(expected = Exception.class)
    public void test03() throws Exception {isu = new InsuredPerson(10, 'M', true);isu.premium();
    }
  • 超時測試:通過@Test(timeout = 超時時限)指定超時時間。

    java復制

    @Test(timeout = 1000)
    public void test() throws Exception {isu = new InsuredPerson(10, 'M', true);isu.premium();  /* 假設premium中包含超時操作 */
    }

9. 測試套件

  • 測試套件(Test Suite):一種特殊的測試類,包含若干其他測試類,執行測試套件即成批地自動執行套件中的所有測試類。

  • 特征

    • @RunWith(Suite.class)注解修飾。

    • @SuiteClasses({測試類1.class, 測試類2.class, ...})指定測試套件中包含的測試類。

    • 是一個空類,沒有定義任何數據域和方法。

10. 實驗練習提示

  • 教學目標:掌握JUnit的初級和高級用法,包括參數化測試類和編寫測試套件。

  • 主要內容

    • 初級:核心運行器、固化方法、斷言。

    • 高級:異常測試、參數化運行器、測試套件運行器。

  • 建議練習

    • 使用@Test注解的JUnit方法。

    • 使用assertEquals斷言比較變量或對象。

    • 使用@Test(expected = Exception.class)注解的JUnit方法。

    • 使用@RunWith(Parameterized.class)@Parameters注解的JUnit方法。

    • 使用測試套件@RunWith(Suite.class)@SuiteClasses({})

總結

這份PPT詳細介紹了單元測試的基本概念、JUnit框架的特點和使用方法,以及如何設計和運行測試用例。通過學習這些內容,可以掌握如何使用JUnit進行自動化單元測試,提高代碼質量和測試效率。

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

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

相關文章

Leetcode.264 丑數 II

題目鏈接 Leetcode.264 丑數 II mid 題目描述 給你一個整數 n n n ,請你找出并返回第 n n n 個 丑數 。 丑數 就是質因子只包含 2 2 2、 3 3 3 和 5 5 5 的正整數。 示例1: 輸入:n 10 輸出:12 解釋:[1, 2, 3,…

瑞芯微RV1126部署YOLOv8全流程:環境搭建、pt-onnx-rknn模型轉換、C++推理代碼、錯誤解決、優化、交叉編譯第三方庫

目錄 1 環境搭建 2 交叉編譯opencv 3 模型訓練 4 模型轉換 4.1 pt模型轉onnx模型 4.2 onnx模型轉rknn模型 4.2.1 安裝rknn-toolkit 4.2.2 onn轉成rknn模型 5 升級npu驅動 6 C++推理源碼demo 6.1 原版demo 6.2 增加opencv讀取圖片的代碼 7 交叉編譯x264 ffmepg和op…

【Python爬蟲(32)】從單飛 to 團戰:Python多線程爬蟲進化史

【Python爬蟲】專欄簡介:本專欄是 Python 爬蟲領域的集大成之作,共 100 章節。從 Python 基礎語法、爬蟲入門知識講起,深入探討反爬蟲、多線程、分布式等進階技術。以大量實例為支撐,覆蓋網頁、圖片、音頻等各類數據爬取&#xff…

C#初級教程(1)——C# 與.NET 框架:探索微軟平臺編程的強大組合

圖片來源: https://www.lvhang.site/docs/dotnettimeline 即夢AI - 一站式AI創作平臺 一、歷史發展脈絡 在早期的微軟平臺編程中,常用的編程語言有 Visual Basic、C、C。到了 20 世紀 90 年代末,Win32 API、MFC(Microsoft Found…

【接口封裝】——13、登錄窗口的標題欄內容設置

解釋&#xff1a; 1、封裝內容&#xff1a;圖標、文本內容、寬度 2、ui.iconLabel&#xff1a;在UI文件中的自定義命名 3、引入頭文件&#xff1a;#include<qpixmap.h> 函數定義&#xff1a; #pragma once#include <QWidget> #include "ui_TitleBar.h"cl…

DeepSeek全生態接入指南:官方通道+三大云平臺

DeepSeek全生態接入指南&#xff1a;官方通道三大云平臺 一、官方資源入口 1.1 核心交互平臺 &#x1f5a5;? DeepSeek官網&#xff1a; https://chat.deepseek.com/ &#xff08;體驗最新對話模型能力&#xff09; 二、客戶端工具 OllamaChatboxCherry StudioAnythingLLM …

web安全:跨站請求偽造 (CSRF)

跨站請求偽造 (CSRF) ? 跨站請求偽造&#xff08;CSRF&#xff0c;Cross-Site Request Forgery&#xff09; 是一種網絡攻擊方式&#xff0c;攻擊者誘使受害者在未經其授權的情況下執行特定操作。CSRF 利用受害者已登錄的身份和瀏覽器自動發送的認證信息&#xff08;如 Cooki…

前端ES面試題及參考答案

目錄 let/const 與 var 的區別?TDZ 是什么? 箭頭函數與普通函數的區別?箭頭函數能否作為構造函數? 模板字符串的嵌套表達式和標簽模板用法? 解構賦值的應用場景及對象 / 數組解構差異? 函數參數默認值的生效條件及暫時性死區問題? 展開運算符(...)在數組 / 對象中…

Windows 圖形顯示驅動開發-查詢 WDDM(3.2) 功能支持和啟用

查詢 Windows 顯示驅動程序模型 (WDDM) 功能的支持和啟用。 其中介紹了&#xff1a; 用戶模式和內核模式顯示驅動程序&#xff08;UMD 和 KMD&#xff09;如何查詢 OS&#xff0c;以確定 WDDM 功能在系統上是否受支持和已啟用。 OS 如何確定驅動程序是否支持特定的 WDDM 功能…

MySQL InnoDB 存儲引擎的索引詳解

在 MySQL 中&#xff0c;InnoDB 是最常用的存儲引擎&#xff0c;它支持事務、行級鎖和外鍵約束等功能&#xff0c;而索引則是提升數據庫查詢性能的關鍵。在 InnoDB 存儲引擎中&#xff0c;索引不僅僅是提高查詢速度的工具&#xff0c;還是數據庫的核心組成部分之一。本文將詳細…

基于Spring Boot的RabbitMQ延時隊列技術實現

文章目錄 基于Spring Boot的RabbitMQ延時隊列技術實現延時隊列應用場景基本概念實現延時隊列添加依賴基礎配置配置類設計消息生產者消息消費者 兩種TTL設置方式 訂單超時關閉實例訂單服務消息處理 延遲消息插件安裝插件配置延遲交換機 基于Spring Boot的RabbitMQ延時隊列技術實…

畢業項目推薦:基于yolov8/yolov5/yolo11的番茄成熟度檢測識別系統(python+卷積神經網絡)

文章目錄 概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式&#xff09;功能6 支持切換檢測到的目標查看 二、數據集三、算法介紹1. YO…

【智能客服】ChatGPT大模型話術優化落地方案

本文原創作者:姚瑞南 AI-agent 大模型運營專家,先后任職于美團、獵聘等中大廠AI訓練專家和智能運營專家崗;多年人工智能行業智能產品運營及大模型落地經驗,擁有AI外呼方向國家專利與PMP項目管理證書。(轉載需經授權) 目錄 一、項目背景 1.1 行業背景 1.2 業務現…

STM32的HAL庫開發---單通道ADC采集(DMA讀取)實驗

一、實驗簡介 正常單通道ADC采集順序是先開啟ADC采集&#xff0c;然后等待ADC轉換完成&#xff0c;也就是判斷EOC位置1&#xff0c;然后再讀取數據寄存器的值。 如果配置了DMA功能&#xff0c;在EOC位被硬件置1后&#xff0c;自動產生DMA請求&#xff0c;然后DMA進行數據搬運…

編譯原理基礎(1)

1.什么是ASCII碼&#xff1f; ASCII碼即美國信息交換標準代碼&#xff0c;是基于拉丁字母的電腦編碼系統&#xff0c;用于顯示現代英語和部分西歐語言。其7位編碼范圍0-127&#xff0c;8位擴展到0-255。字符集含控制字符&#xff08;0-31、127&#xff0c;用于控制設備或表示通…

基于 Highcharts 實現 Vue 中的答題統計柱狀圖組件

在現代 Web 開發中&#xff0c;數據可視化是一個重要的組成部分&#xff0c;而 Highcharts 是一個廣泛使用的 JavaScript 圖表庫&#xff0c;可以幫助開發者在 Web 頁面上輕松地繪制豐富的圖表。在本文中&#xff0c;我們將基于 Highcharts 創建一個用于答題統計的柱狀圖&#…

SQLAlchemyError: A transaction is already begun on this Session.

資料 sqlalchemy 事務 - 簡書 在 SQLAlchemy 中&#xff0c;事務是通過會話來管理的。當你開始一個事務&#xff08;例如使用 async with db.begin()&#xff09;&#xff0c;它會開啟一個新的事務&#xff0c;并在事務塊結束時自動提交或回滾。如果在同一個會話中&#xff0c…

Java Web開發實戰與項目——Spring Boot與Redis實現緩存管理

緩存技術在現代Web開發中至關重要&#xff0c;尤其是在高并發的環境中&#xff0c;緩存能夠有效減少數據庫訪問壓力、提高系統性能。Redis作為最流行的內存數據存儲系統之一&#xff0c;常用于緩存管理。本節將講解如何在Spring Boot項目中集成Redis&#xff0c;實現緩存管理&a…

C語言學習【1】C語言關于寄存器的封裝

目錄 1.封裝寄存的C語言的語法volatile&#xff1a;unsigned int:*pGpiobOdrvolatile unsigned int * 2.進一步C語言的封裝 在嵌入式中&#xff0c;底層一定是操作寄存器&#xff0c;我有一個理念&#xff0c;凡事一定要想清楚&#xff0c;把任何知識點融入自己的理解之中&…

#滲透測試#批量漏洞挖掘#暢捷通T+遠程命令執行漏洞

免責聲明 本教程僅為合法的教學目的而準備,嚴禁用于任何形式的違法犯罪活動及其他商業行為,在使用本教程前,您應確保該行為符合當地的法律法規,繼續閱讀即表示您需自行承擔所有操作的后果,如有異議,請立即停止本文章讀。 目錄 一、漏洞概況 二、攻擊特征 三、應急處置…