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

 

第一篇文章, 關於Mock的概念介紹: http://www.javashuo.com/article/p-rjikmmye-ha.htmlhtml

第二篇文章, 關於方法Mock的介紹: http://www.javashuo.com/article/p-bbgioyks-mg.htmlgit

第三篇文章, 關於屬性Mock的介紹: http://www.javashuo.com/article/p-vrvqgofk-mh.htmlgithub

本文介紹使用Moq進行行爲測試.測試

使用的代碼: https://github.com/solenovex/Moq4-Tutorial-Code 裏面的 04 Before 部分.spa

 

Mock 行爲

前兩篇介紹的內容都是基於狀態的測試, 也就是代碼執行後, 咱們堅持被測試系統的狀態是否和咱們期待的一致.3d

而本文介紹的是行爲測試, 也就是說咱們要確認某些方法會被執行或者某些屬性被訪問了.htm

 

確認方法被調用

建立一個新的測試方法:blog

與狀態測試不一樣, 這裏我不使用Assert, 我是用的是mock.Verify() 來斷定其參數裏的方法會被執行. 在這裏也可使用It類進行參數匹配.get

該測試會經過, 表示IsHealthy確實被執行了:it

 

若是我改變一下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.

相關文章
相關標籤/搜索