玩轉C#之【單元測試】

by NickChi
單元測試

介紹

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

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

  • 單元測試(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://ithelp.ithome.com.tw/articles/10298059

You may also like

Leave a Comment