玩轉C#之【單元測試】

更新 發佈閱讀 4 分鐘

介紹

通常我們程式寫完之後,要確保程式沒問題我們就會進行測試

在這裡我們將測試分兩大類:

  • 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試
  • 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統

在這裡只會簡單介紹一下單元測試的概念

這裡在將單元測試講白話一點,我們會寫一個程式用來測試我們寫的每一個function 是否正確

假設我們寫好一段程式sum功能

class Computer
{
//加法計算
public int sum(int x, int y)
{
return x + y;
}
}

我們可能會類似這樣寫測試程式

void sum_輸入1_1輸出2
{
//arrang
var target =new Computer();
int x =1;
int y =1;
int expected = 2;
//act
int actual =target.sum(x,y);
//assert
//這段意思就是 如果expected等於actual 則表示測試成功,如果不等於就會顯示測試失敗
Assert.AreEqual(expected,actual);
}
raw-image

單元測試的特性

在撰寫測試程式時需要保持以下特性:
• Fast 快速
• Independent 獨立
• Repeatable 可重複
• Self-Validating 自我驗證(可反應驗證結果)
• Timely 及時

Fast 快速

每個單元測試的執行時間應該要很短。
一個單元測試的執行時間單位都是毫秒,如果有某個單元測試所執行的時間超過數秒,就要做檢查。

因為每次修改程式的時候都應該執行測試,確保沒有被改壞,因此如果時間跑太長,你每次改好一段Code就要等好幾分鐘,豈不是浪費生命都在等待。

Independent 獨立

單元測試不與外部資源相依,單元測試之間也不能夠相依,要能夠單獨針對測試目標進行測試。
外部資源(檔案、資料庫、網路、服務、元件等),單元測試都是個別獨立、無順序性、執行結果不會影響其他測試。

假設在一個沒網路的環境是不應該影響到測試結果。

Repeatable 可重複

所有的單元測試都可重複被執行,且不影響預期的結果。
無論執行多少次,測試的結果都是一樣的

不應該出現會被環境影響到,或者亂數

Self-Validating:自我驗證(可反應驗證結果)

單元測試執行不論成功或失敗,都應該要能夠從測試報告裡直接瞭解其意義或失敗的原因。

Timely:及時

單元測試應該在產品程式碼完成的當下就可以驗證執行結果是否,符合預期

關於Muck、Test Framewor..等等之後會專門寫一篇文章跟大家講解

參考資料

一起設計出可被單元測試的程式碼吧!

本篇已同步發表至個人部落格
https://moushih.com/2022ithome25/

鐵人賽文章

https://ithelp.ithome.com.tw/articles/10298059

留言
avatar-img
留言分享你的想法!
avatar-img
一代軍師
8會員
39內容數
我是這個部落格的作者,喜歡分享有關投資 💰、軟體開發 💻、占卜 🔮 和虛擬貨幣 🚀 的知識和經驗。
一代軍師的其他內容
2024/02/12
盤面基本組成要素 十天干:甲乙丙丁戊己庚辛壬癸 十二地支:子丑寅卯辰巳午未申酉戌亥 五行:木、火、土、金、水 八門:休、生、傷、杜、景、死、驚、開 八神:符、蛇、陰、合、虎、武、九、天 九星:蓬、任、沖、輔、英、芮、柱、心、禽 八卦:坎、艮、震、兌、離、坤、乾 六個旬首:甲子戊、甲戊
Thumbnail
2024/02/12
盤面基本組成要素 十天干:甲乙丙丁戊己庚辛壬癸 十二地支:子丑寅卯辰巳午未申酉戌亥 五行:木、火、土、金、水 八門:休、生、傷、杜、景、死、驚、開 八神:符、蛇、陰、合、虎、武、九、天 九星:蓬、任、沖、輔、英、芮、柱、心、禽 八卦:坎、艮、震、兌、離、坤、乾 六個旬首:甲子戊、甲戊
Thumbnail
2023/10/22
Drawmind 畫鏡 主要目的是透過藝術治療,幫助個人減輕情感壓力、提升心理健康,並提供一個具有專業指導的平台,讓用戶進行情感表達、自我探索和康復。
Thumbnail
2023/10/22
Drawmind 畫鏡 主要目的是透過藝術治療,幫助個人減輕情感壓力、提升心理健康,並提供一個具有專業指導的平台,讓用戶進行情感表達、自我探索和康復。
Thumbnail
2023/08/14
原理 八字 八字不等於出生時間 八字是根據每個兩小時為一個單位的時辰來劃分的。 它包括年、月、日和時這四個要素,其中年、月、日分別對應天干地支。 即使缺少具體出生時刻,也仍然可以排出命盤進行分析。 紫微斗數 需要精確的出生的小時數,因為出生時間的稍微差異呈現出來的命盤會有天差地別,從而
Thumbnail
2023/08/14
原理 八字 八字不等於出生時間 八字是根據每個兩小時為一個單位的時辰來劃分的。 它包括年、月、日和時這四個要素,其中年、月、日分別對應天干地支。 即使缺少具體出生時刻,也仍然可以排出命盤進行分析。 紫微斗數 需要精確的出生的小時數,因為出生時間的稍微差異呈現出來的命盤會有天差地別,從而
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
複習一下: 我們學習了關於撰寫程式的相關觀念 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。 函式(fu
Thumbnail
複習一下: 我們學習了關於撰寫程式的相關觀念 條件分支(if/else) : 藉由條件分支讓程式執行相對應的功能。 迴圈(while loop ) :程式利用迴圈反覆執行某個區塊的程式碼。 字串處理 (string) : 每個程式都在處理資料,而字串是一種非常重要且常用的資料。 函式(fu
Thumbnail
在第十課中,我們將學習 Python 的單元測試 (Unit Testing)。 單元測試是一種軟體測試方法,我們將程式分解為最小的可測試部分(稱為單元)並個別進行測試。
Thumbnail
在第十課中,我們將學習 Python 的單元測試 (Unit Testing)。 單元測試是一種軟體測試方法,我們將程式分解為最小的可測試部分(稱為單元)並個別進行測試。
Thumbnail
今天我要跟大家分享的是python寫的猜數字遊戲。遊戲的規則很簡單,就是電腦會隨機產生一個1到100之間的整數,然後讓使用者猜這個數字是多少,每次猜完電腦會提示使用者是猜大了還是猜小了,直到猜中為止,遊戲還會記錄使用者猜了幾次,並根據次數給予不同的評價,下面我們來看看程式碼吧!
Thumbnail
今天我要跟大家分享的是python寫的猜數字遊戲。遊戲的規則很簡單,就是電腦會隨機產生一個1到100之間的整數,然後讓使用者猜這個數字是多少,每次猜完電腦會提示使用者是猜大了還是猜小了,直到猜中為止,遊戲還會記錄使用者猜了幾次,並根據次數給予不同的評價,下面我們來看看程式碼吧!
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
Thumbnail
什麼是迴圈?就是不停地、不斷地在做同樣的事,所以才稱「重複性迴圈」,因為一直再輪迴,那麼像上一篇的例子,不到60分就要一直補考是要怎麼用呢?重複性迴圈主要有for迴圈、while迴圈、do...while迴圈,有何不一樣?接下來就來介紹一下它們? 一、for迴圈 這一個會運用到初始值、繼續執行的條件
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News