介紹
通常我們程式寫完之後,要確保程式沒問題我們就會進行測試
在這裡我們將測試分兩大類:
- 單元測試(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..等等之後會專門寫一篇文章跟大家講解
參考資料
鐵人賽文章