
除錯
|
523
測試的原始碼中內嵌資料。測試一個會讀取或寫入檔案物件的函式時,使
用類別
io.TextIO
的一個實體用於文字,也就是 Unicode 檔案(
io.BytesIO
用於位元組,也就是二進位檔案,如前面「記憶體內部的「檔案」:
io.StringIO 和 io.BytesIO」中所涵蓋的),以取得資料在記憶體中的一個
「檔案」:會比寫入磁碟還要快速,而且無須清理(例如在測試之後卸除
磁碟)。
在少數情況中,可能要提供無法合理地內嵌到測試原始碼中的大量資料才
能觸動一個模組的必要功能性。在這種情況中,你的單元測試必須仰賴輔
助性的外部資料檔來存放資料,以提供給它所測試的模組或與輸出進行比
較。即使是在這種情況中,使用前面提及的
io
類別通常都會比較好,而
非讓被測模組進行實際的磁碟 I/O。更重要的是,我們強烈建議你為會與
外部實體(例如資料庫、GUI,或透過網路連接的其他程式)互動的單元
測試模組使用 stubs。使用 stubs 會比使用真正的外部實體更容易控制測試
的所有面向。此外,為了重複執行,你能執行單元測試的速度就顯得很重
要,而在 stubs 中進行模擬的作業會比真實的作業還要快。
為了測試,請提供一個種子來讓隨機行為可重現
如果你的程式碼用到偽隨機數字(如前面「random 模
組」中所涵蓋的),你可以確保它的「隨機」行為是
可重
現
(
reproducible
)的,來讓測試工作更容易進行:具體而
言,就是確保你的測試可以很容易地以一個已知的引數呼
叫
random.seed
,如此就確保了偽隨機數字變得完全可預 ...