-
Notifications
You must be signed in to change notification settings - Fork 2
Unit Test
##什麼是單元測試? 針對模組撰寫的測試即為單元測試,是所有測試類型中的最小單位。
##為什麼要寫單元測試? 軟體是由眾多模組組成,透過模組化並提供有限的接口,讓模組之間用接口連接,可以有效降低軟體的複雜度。因此,模組接口的正確性便至關重要了。而單元測試就是單獨測試一個模組的接口是否符合當初約定的契約。
##白話點說... 其實就是一個 object 在提供功能之前,事先測試 public 的 function 是否符合 spec 。
##怎麼寫單元測試?
Lazarus 有提供 fpcunit ,此工具可以幫助建立 testcase ,並提供 GUI 界面方便運行所有 testcase 。
具體步驟:
-
Lazarus > File > New > FPCUnit Test Appplication -
建立第一個 TTestCase
-
在 puplished 區新增要測試的 function 。
-
在測試 function 中,可以使用
AssertEquals跟Fail這兩個 function 來驗證正確性,例如以下 testcase 用來驗證DoAdd這個 function 是否正確執行加法:procedure TTestCase1.TestAdd; begin value:=DoAdd(1, 2); AssertEquals('result fail !', 3, value); end;
AssertEquals 的第二個參數為預期值,第三個參數為實際值,此 function 會在預期跟實際不符時觸發例外。
##怎麼在 ezCAM 寫單元測試?
- 單元測試是獨立的 project ,路徑在 ezCAM/test/ezcamtest_gui
- 如果要針對 foobar_utility.pas 下面的 TFooBar 寫測試,那麼到:
File > New > FPC Unit Test Case新增一筆。 - pas 建議命名成 testcase_foobar_utility 。(為了在眾多 pas 中區別)
- 在 testcase_foobar_utility 中 use foobar_utility ,如果路徑找不到,在 project option 中新增 path 。
- 可以在 published 新增 testcase 了,have fun !
##哪些需要寫測試?
- 底層運算的 function 建議都要有測試,並且要覆蓋大部分的 case 。
- 曾經發生 bug 的 case ,都要新增一筆。
- 特別容易出錯的模組,要加強測試。
##額外的好處...
- 因為單元測試是測試 public function 是否符合 spec ,則考慮測試的同時也幫助你訂出 spec (只有訂出 spec 你才知道是實作有問題還是規格有問題)。
- 理論上要針對一個 object 寫單元測試,為了達到真正的獨立測試,盡量要讓此 object 完全不相依於其餘 object ,因此如果你設計此 object 時一開始就考慮到測試,可以幫助你設計出完全自給自足,沒有任何副作用的模組。
##小心...
- 注意不要 use 到大部頭的 pas (如 odbedit ,script command, module 相關),會導致整個 ezCAM 都被 use 進來。
- 運行時建議直接跑 ezcamtest_gui 的執行檔,因為有些 testcase 會扔出例外。
##參考資料 http://wiki.freepascal.org/fpcunit http://zh.wikipedia.org/zh-tw/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95