之前學習了單元測試的基礎知識,以及樁物件和模擬物件的不同作用。但在實際應用中,往往不會直接手寫樁物件或者模擬物件,而是使用隔離框架動態的建立這些物件,這可以讓測試變得更簡便、快捷,還可以更好地應對複雜的測試。這裡學習的便是隔離框架的一種——nsubstitute。
一 開始使用nsubstitute
在前面有乙個測試場景為:使用loganalyzer.analyze方法分析檔案,如果檔名過短,就記錄日誌,為了測試loganalyzer類與ilogger實現之間的互動,需要手寫乙個實現了ilogger介面的模擬物件,並針對這個模擬物件進行斷言。那麼現在使用nsubstitute來進行這一過程,測試**只有下面幾行就可以做到了。
logger就是使用nsubstitute建立的模擬物件。substitute靜態類動態負責建立偽物件,for 方法是產生偽物件的基本方法。最後一句中的logger.receive方法在介面中並不存在,而是被nsubstitute擴充的,用於驗證方法是否被呼叫。logger.received().logerror("filename too short:a.txt")整體的意思便是:測試logger物件是否receive對logerror方法的呼叫請求,而且傳遞的引數為"filename too short:a.txt"。這是對模擬物件的測試方法。
二 設定偽物件的返回值
還可以設定方法在一定條件下的返回值
a) 全匹配
rule.isvalidlogfilename("a.txt").returns(true),指定了當方法isvalidlogfilename()被呼叫且引數為"a.txt"時返回結果為true
b) 型別匹配
rule.isvalidlogfilename(arg.any()).returns(true),指定了當方法isvalidlogfilename()被呼叫且引數為string型別時返回結果為true,這樣匹配的範圍會更廣,這種指定方法也最常用。型別匹配主要使用arg來指定
c) 返回異常
還可以指定方法在一定的條件下返回何種異常,比如這兒的**中指定的條件為isvalidlogfilename()被呼叫且引數為string型別時,返回exception("fake exception")。這兒的寫法與前面的有點區別,用到了lambda表示式
三 使用隔離框架的注意事項
a) 隔離框架的寫法會使**可讀性降低
b) 明確要驗證的物件,不要驗證錯誤的事情,也不要過度驗證
c) 盡量少用模擬物件,乙個測試中最多出現乙個模擬物件,但模擬物件存在時,要針對模擬物件進行斷言
d) 不要使用樁物件來驗證互動,這是模擬物件做的事情
單元測試 四 隔離框架NSubstitute
之前學習了單元測試的基礎知識,以及樁物件和模擬物件的不同作用。但在實際應用中,往往不會直接手寫樁物件或者模擬物件,而是使用隔離框架動態的建立這些物件,這可以讓測試變得更簡便 快捷,還可以更好地應對複雜的測試。這裡學習的便是隔離框架的一種 nsubstitute。一 開始使用nsubstitute 在...
go Test 單元測試 測試框架
1.建立乙個名為 test.go 的檔案 如果是包中的單元測試,就在包所在目錄下建立該檔案 並將下面的 新增到其中,函式命名統一為test t testing.t package main 包中的單元測試main替換成包名 import testing func testsum t testing....
Qt單元測試框架
qtestlib 框架提供了乙個簡單易用的單元測試框架,需要在工程檔案中新增qt testlib。先看乙個簡單的例子 此外,qt還提供了以下四個會被自動呼叫的private slot inittestcase 在測試開始前被呼叫 cleanuptestcase 在測試結束後被呼叫 init 每個測試...