第一篇文章, 關於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
前兩篇介紹的內容都是基於狀態的測試, 也就是代碼執行後, 咱們堅持被測試系統的狀態是否和咱們期待的一致.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.