使用 Moq 測試.NET Core 應用 -- Mock 行為
第一篇文章, 關於Mock的概念介紹: https://www.cnblogs.com/cgzl/p/9294431.html
第二篇文章, 關於方法Mock的介紹: https://www.cnblogs.com/cgzl/p/9300356.html
第三篇文章, 關於屬性Mock的介紹: https://www.cnblogs.com/cgzl/p/9304567.html
本文介紹使用Moq進行行為測試.
使用的代碼: https://github.com/solenovex/Moq4-Tutorial-Code 裏面的 04 Before 部分.
Mock 行為
前兩篇介紹的內容都是基於狀態的測試, 也就是代碼執行後, 我們堅持被測試系統的狀態是否和我們期待的一致.
而本文介紹的是行為測試, 也就是說我們要確認某些方法會被執行或者某些屬性被訪問了.
確認方法被調用
創建一個新的測試方法:
與狀態測試不同, 這裏我不使用Assert, 我是用的是mock.Verify() 來判定其參數裏的方法會被執行. 在這裏也可以使用It類進行參數匹配.
該測試會通過, 表示IsHealthy確實被執行了:
如果我改變一下Verify裏IsHealthy()方法的參數範圍:
那麽針對此例, 測試就會失敗:
這是因為IsHealthy()方法被調用時的參數與我所期待的參數不一致.
自定義錯誤信息
這時, 我們可以使用另一個重載版本的Verify()方法, 它可以添加一個錯誤信息的參數:
這時測試失敗的信息如下:
此外通過重載方法, 還可以判斷方法被調用的次數
方法被調用次數
還是用到了Verify的重載方法和Times這個struct.
1. 沒被調用:
2. 被調用1次:
3. 被調用特定次數:
Times這個struct裏面還有很多選項, 請自行摸索.
確認屬性訪問
首先是Get.
與之前調用的Verify()不同, 針對屬性, 需要使用VerifyGet()方法來確保屬性被訪問了:
這個測試會通過, 因為這個屬性確實被訪問了:
檢查另一個沒有被訪問的屬性:
那麽結果就會失敗:
下面是Set.
很簡單, 使用VerifySet()方法即可. 再創建一個測試方法:
在VerifySet方法裏需要設定被Set的屬性以及被Set的值.
針對此例, 這個測試會通過:
但是如果Set的值不正確, 測試就會失敗:
本文先到這....未完待續....
代碼: https://github.com/solenovex/Moq4-Tutorial-Code 04 After.
使用 Moq 測試.NET Core 應用 -- Mock 行為