linux shell測試函數

在 C 語言中,int main(int argc, char *argv[])是程序的入口函數,而??在?main函數中調用專門的測試邏輯(如測試函數)??的程序結構,通常被稱為??測試程序(Test Program)??或??測試驅動(Test Harness)??。

其核心目的是驗證程序其他模塊(如函數、功能)的正確性,屬于軟件開發中的??單元測試(Unit Testing)??或??集成測試(Integration Testing)??的范疇。

??核心概念與作用??

1. ??測試函數??

測試函數是專門用于驗證某個模塊(如函數、功能)是否符合預期的輔助函數。它通常包含以下步驟:

??調用被測試函數??:傳入預設的輸入參數。?

??檢查結果??:對比被測試函數的輸出(返回值、全局變量、硬件狀態等)與預期結果。?

輸出測試結論??:通過打印日志(如?printf)或斷言(如?assert)提示測試通過或失敗。

2. ??測試程序的結構??

典型的測試程序會在?main函數中直接調用測試函數,或在?main中組織多個測試用例,覆蓋不同場景。例如:

#include <stdio.h>
#include <assert.h>// 被測試的核心函數(示例:計算兩數之和)
int add(int a, int b) {return a + b;
}// 測試函數(驗證 add 函數)
void test_add() {// 測試用例 1:正數相加int result1 = add(2, 3);assert(result1 == 5);  // 斷言結果等于預期printf("test_add(2+3) 通過\n");// 測試用例 2:負數相加int result2 = add(-1, -2);assert(result2 == -3);printf("test_add(-1+-2) 通過\n");// 測試用例 3:混合符號int result3 = add(5, -3);assert(result3 == 2);printf("test_add(5+-3) 通過\n");
}// main 函數調用測試函數
int main(int argc, char *argv[]) {// 運行所有測試用例test_add();printf("所有測試通過!\n");return 0;
}

??擴展說明??

??單元測試框架??:對于大型項目,開發者會使用專門的單元測試框架(如 C 語言的?CheckUnity)來簡化測試函數的編寫和管理(支持自動發現測試用例、生成報告等)。

??嵌入式場景??:在嵌入式開發中,測試函數可能直接操作硬件(如讀取傳感器、控制外設),驗證驅動或模塊的功能是否符合預期(例如測試 ADC 采樣值是否在合理范圍內)。

例如:讀ADC、控應用IO、應用模塊邏輯等等。rt-thread中的MSH也是如此

??總結??

包含測試函數的?main程序本質是??測試驅動程序??,通過手動或框架輔助的測試函數驗證核心功能,是軟件開發中保證代碼質量的關鍵手段。

其核心思想是“通過小范圍的、可控的測試用例,快速驗證功能正確性”,尤其適用于需要高可靠性的領域(如嵌入式、醫療設備)。

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

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

相關文章

【Java SE】抽象類、接口與Object類

文章目錄一、 抽象類&#xff08;Abstract Class&#xff09;1.1 什么是抽象類&#xff1f;1.2 抽象類的語法1.2.1 定義抽象類1.2.2 繼承抽象類1.3 抽象類的特性1.3.1 不能直接實例化1.3.2 抽象方法的限制1.3.3 抽象類可以包含構造方法1.3.4 抽象類不一定包含抽象方法1.3.5 抽象…

Autodl 創建新虛擬環境 python3.9

問題&#xff1a;本人在autodl上保存的環境因為很長時間沒有開機&#xff0c;autodl竟然給我刪除了。后來看了官網的介紹我才發現&#xff0c;原來15天不開機&#xff0c;autodl就會自動釋放實例。 因此&#xff0c;我就自己重新選了一個虛擬環境&#xff0c;從頭開始配置。 GP…

應急響應靶機-WindowsServer2022挖礦事件

依舊手癢開局&#xff0c;知攻善防實驗室的原創靶機 https://mp.weixin.qq.com/s/URrNHvQSnFKOyefHKXKjQQ 相關賬戶密碼&#xff1a; Administrator/zgsf123 注意&#xff1a;做個原始快照&#xff08;方便日后復習&#xff09;&#xff0c;安裝VMware tool&#xff08;安裝后圖…

PCB電路設計學習3 電路原理圖設計 元件PCB封裝設計與添加

目錄PCB電路設計學習3五、電路原理圖設計5.1 32個發光二極管電路5.2 單片機外圍電路5.3 供電與程序下載電路5.4 連接各部分網絡&#xff0c;繪制邊框和說明六、元件PCB封裝設計與添加6.1 名詞解釋6.2 繪制PCB附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)PCB電路設計學習3 …

redis---常用數據類型及內部編碼

Redis 中每種常用數據類型都對應多種內部編碼&#xff0c;這些編碼會根據數據特征&#xff08;如大小、數量&#xff09;自動切換&#xff0c;以平衡存儲效率和操作性能。1.字符串&#xff08;String&#xff09;用途&#xff1a;存儲文本、數字或二進制數據&#xff0c;是最基…

crypto.randomUUID is not a function

在本地運行時 crypto.randomUUID 好使&#xff0c;build 后放到服務器上用域名訪問就不好使。原因&#xff1a;瀏覽器策略&#xff0c;瀏覽器在非https、localhost的環境中訪問時&#xff0c;crypto.randomUUID 是不可用的開發時使用的是localhost正常訪問 生產臨時使用的是htt…

【思考】什么是服務器?什么是服務?什么是部署?

文章目錄1 什么是服務器&#xff1f;什么是服務&#xff1f;端口是什么意思&#xff1f;2 什么是部署&#xff1f;1 什么是服務器&#xff1f;什么是服務&#xff1f;端口是什么意思&#xff1f; 服務器本質是一臺運行著程序的電腦&#xff0c;它可以運行著很多程序&#xff0c…

自動駕駛導航信號使用方式調研

1 總結 本文調研在給定導航信號后&#xff0c;如何在端到端架構下&#xff0c;利用導航信息引導軌跡生成。 目前主流的方案可以分為2種。一種是將導航作為“前置引導”深度融入軌跡生成過程&#xff08;導航前置型&#xff09;&#xff1b;另一種則是將導航作為“后置評價”標準…

玳瑁的嵌入式日記D21-08020(數據結構)

雙向鏈表double link listtypedef struct dou_node { DATATYPE data; struct dou_node *prev; struct dou_node *next; }DouLinkNode;雙向鏈表&#xff1a;節點 數據 NEXT PREV . 手撕代碼(增加刪除) 增加&#xff0c;刪除的操作&#xff0c; 需要 tmp 停止待操作節點的前一…

Uipath查找元素 查找子元素 獲取屬性活動組合使用示例

Uipath 查找元素 查找子元素 獲取屬性組合使用示例使用場景案例介紹項目流程圖附加瀏覽器查找元素查找子元素遍歷循環獲取屬性點擊元素使用場景 在實際場景中&#xff0c;有時需RPA自動點擊某組范圍元素或獲取某組范圍元素的值&#xff0c;如需獲取指定的父元素&#xff0c;再…

【MongoDB與MySQL對比】

MongoDB 與 MySQL 全方位對比分析在現代軟件開發中&#xff0c;數據庫的選擇直接影響系統性能、擴展性和開發效率。MongoDB 和 MySQL 作為兩種主流數據庫&#xff0c;分別代表了 NoSQL 和關系型數據庫的典型&#xff0c;各自在不同場景中發揮著重要作用。本文將拋開代碼示例&am…

Spring AI開發指導-對話模型

對話模型接口描述Spring AI基于Spring Cloud的架構體系&#xff0c;定義了一系列可擴展的API接口&#xff0c;支持對接不同類型的AI大模型的核心功能&#xff0c;這些API接口支持同步編程模式或者異步編程模式&#xff1a;接口ModelModel是同步編程模式接口&#xff0c;其參數支…

Win11 下卸載 Oracle11g

目錄 1、停止服務 2、啟動 Universal install 應用 3、執行 deinstall.bat 腳本 4、刪除注冊表相關數據 5、刪除環境變量中的oracle相關路徑 6、刪除安裝文件 7、刪除C盤中的相關Oracle文件 8、刪除 Oracle 數據存放目錄 9、檢查 10、重裝oracle可能還會碰到的問題 &…

深入剖析Spring Boot應用啟動全流程

目錄 前言 啟動流程概覽 一、第一階段&#xff1a;初始化SpringApplication 二、第二階段&#xff1a;運行SpringApplication 三、第三階段&#xff1a;環境準備 四、第四階段&#xff1a;創建應用上下文 五、第五階段&#xff1a;準備應用上下文 六、第六階段&#xf…

Matplotlib 可視化大師系列(三):plt.bar() 與 plt.barh() - 清晰對比的柱狀圖

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;三&#xff09;&#xff1a;plt.bar() 與 plt.barh() - 清晰對比的柱狀圖一、 柱狀圖是什么&#xff1f;何時使用&#xff1f;二、 函數原型與核心參數plt.bar(x, height, ...) - 垂直柱狀圖plt.ba…

基于 FastAPI 和 OpenFeature 使用 Feature Flag 控制業務功能

模擬業務場景&#xff1a;多租戶系統跨域轉賬&#xff0c;需要控制某租戶下某用戶是否可以在某域轉賬 open_feature_util.py import typing from abc import abstractmethod, ABCMeta from typing import Sequencefrom openfeature.evaluation_context import EvaluationContex…

Stm32通過ESP8266 WiFi連接阿里云平臺

本文將介紹stm32如何通過WiFi來連接阿里云&#xff0c;上傳數據和接收指令。要先與阿里云建立TCP連接&#xff0c;然后再通過MQTT協議交互。 大體流程&#xff1a;1、在阿里云網頁上創建產品和設備&#xff1b;2、stm32通過WiFi連接云平臺&#xff1b;3、MQTT連接阿里云&#…

北京-測試-入職甲方金融-上班第三天

今日上班時間9-20.18&#xff0c;再加42分鐘就可以拿到75塊錢了&#xff0c;但我想回家&#xff0c;所以下班今天上午有人事舉辦的入職培訓&#xff0c;下午有業務培訓&#xff0c;培訓完領導給我安排了兩個需求。慌死&#xff0c;嚇死&#xff0c;我都不懂&#xff0c;業務和工…

Java基礎第2天總結

使用switch時注意事項&#xff1a;表達式類型只能是byte、short、int、char,JDK5開始支持枚舉&#xff0c;JDK7開始支持String&#xff0c;不支持double、float、long(精確度問題&#xff0c;小數有點不精確)。case給出的值不允許重復&#xff0c;且只能是字面量&#xff0c;不…

鴻蒙開發中的List組件詳解

目錄 引言 1.List組件基礎 2.List接口參數 1.space 2.initialIndex 3.scroller 3.ListView的屬性 1.listDirection 2.lanes 3.divider 4.scrollBar 4.布局與約束 5.ListItem生命周期 1.使用ForEach創建ListItem 2.使用LazyForEach創建ListItem 3…