Moq API:Verifiable() & Verfiy()
- Moq API:Verifiable() & Verfiy()
這個API中文解釋是說,Mock的Function必須要被執行才能通過單元測試。這解說對我來說其實是有看沒有懂。先來寫段程式看看在Setup後面加上Verfifiable後會發生什麼事。結果是執行單元測試後什麼事情都沒有發生
_mockContext.Setup(c => c.test(It.IsAny<string>())).Returns("moke test done!!").Verifiable();
但如果再加上_mockContext.Verify()
這段程式的話,執行單元測試就會亮紅燈了。
_mockContext.Setup(c => c.test(It.IsAny<string>())).Returns("moke test done!!").Verifiable();
_mockContext.Verify();
把程式再加上_mockContext.Object.test("test string")
,執行單元測試就亮綠燈了。
_mockContext.Setup(c => c.test(It.IsAny<string>())).Returns("moke test done!!").Verifiable();
var test = _mockContext.Object.test("test string");
_mockContext.Verify();
這樣再回頭看看[Mock的Function必須要被執行才能通過單元測試]這段話應該就會比較有感覺了。至於這個功能可以拿來應用在什麼地方呢?可以用於你Setup了一個Method之後,可以用Verify來確認你是否有真的執行到他(因為可能還是會有些callback function要執行),有了Verifiable & Verify來檢查後,就可以避免你Setup了,卻沒有執行到,卻也不會有任何錯誤訊息回傳,導致測試的流程不完整。(詳細可以參考:Moq中的Verifiable()的用途是什么? & Moq测试基础说谈(三)——属性,常用方法)
Ref:
1.Moq中的Verifiable()的用途是什么?
2.Moq测试基础说谈(三)——属性,常用方法)
3.[Day 6] Mockk與Mock的入門觀念