1. 程式人生 > >使用 Moq 測試.NET Core 應用 -- Mock 行為

使用 Moq 測試.NET Core 應用 -- Mock 行為

src 進行 alt 狀態 執行 ref tro 調用次數 eal

第一篇文章, 關於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 行為