2022-10-10|閱讀時間 ‧ 約 4 分鐘

玩轉C#之【單元測試】

介紹

通常我們程式寫完之後,要確保程式沒問題我們就會進行測試
在這裡我們將測試分兩大類:
  • 單元測試(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);
}

單元測試的特性

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

Fast 快速
每個單元測試的執行時間應該要很短。 一個單元測試的執行時間單位都是毫秒,如果有某個單元測試所執行的時間超過數秒,就要做檢查。
因為每次修改程式的時候都應該執行測試,確保沒有被改壞,因此如果時間跑太長,你每次改好一段Code就要等好幾分鐘,豈不是浪費生命都在等待。

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

Repeatable 可重複
所有的單元測試都可重複被執行,且不影響預期的結果。 無論執行多少次,測試的結果都是一樣的
不應該出現會被環境影響到,或者亂數

Self-Validating:自我驗證(可反應驗證結果)
單元測試執行不論成功或失敗,都應該要能夠從測試報告裡直接瞭解其意義或失敗的原因。

Timely:及時
單元測試應該在產品程式碼完成的當下就可以驗證執行結果是否,符合預期
關於Muck、Test Framewor..等等之後會專門寫一篇文章跟大家講解

參考資料

本篇已同步發表至個人部落格 https://moushih.com/2022ithome25/
鐵人賽文章
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.