發表文章

目前顯示的是 11月, 2021的文章

單元測試學習筆記02_虛設常式(stub)、模擬物件(Mock)_call api為例

圖片
一般測試中比較容易頭疼就是在於對於外部資源會有依賴 (像是一段function涉及到發信、寫Log檔、讀取外部文件或者call web api, web service等) 而除了外部資源外還可能會有我只想驗證自己負責的class中特定方法但該方法可能又有去呼叫或者存取也就是依賴到其餘class的方法甚至層層相依等問題 如下圖所示 測試過程往往會遇到目標要測試的方法當中又相依很多其餘的class 甚至會往下相依多個層級 此時我們會藉由類似建構假物件(Fake)的方式來把關注點分離 進行隔離測試程式碼 有點類似 「各人自掃門前雪,莫管他人瓦上霜」的含意。 Microsoft Fakes 會以「虛設常式」或「填充碼」取代應用程式的其他部分,協助您隔離要測試的程式碼。 這些是受測試所控制的一些程式碼片段。 藉由隔離待測的程式碼,您可以在正確的位置尋找測試失敗的原因。 即使應用程式的其他部分還無法運作,您也可以利用虛設常式和填充碼。 該框架鎖定義Fakes 分為兩種類別: 虛設常式(stub) 會以一小段實作相同介面的類別取代類別。 若要使用虛設常式,您所設計的應用程式 必須讓每個元件只相依於介面,而不相依於其他元件 。 (「元件」表示一起設計及更新的類別或類別群組,通常會包含在組件中)。 填充碼(shim) 會在執行階段修改應用程式的編譯程式碼,以便執行您的測試所提供的填充碼,而不是進行指定的方法呼叫。 您可以使用填充碼取代您無法修改的組件 (例如 .NET 組件) 的呼叫。 不過很遺憾這功能只有在enterprice版本的visual studio才有支援 https://stackoverflow.com/questions/18337736/add-fakes-assembly-option-missing/18339061 https://blog.johnwu.cc/article/c-sharp-unit-test-datetime.html 這裡我就沒特別用它來示範了 而一般Fake通用觀念就是上一篇提及到的 主要分成兩大類 虛設常式(stub) 通常 用於驗證目標回傳值 ,以及驗證目標物件狀態的改變(State-Based Testing) These are extremely simplified versions of Mocks, which ty