Moq API:Verifiable() & Verfiy()

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();
未執行mock function

把程式再加上_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後

這樣再回頭看看[Mock的Function必須要被執行才能通過單元測試]這段話應該就會比較有感覺了。至於這個功能可以拿來應用在什麼地方呢?可以用於你Setup了一個Method之後,可以用Verify來確認你是否有真的執行到他(因為可能還是會有些callback function要執行),有了Verifiable & Verify來檢查後,就可以避免你Setup了,卻沒有執行到,卻也不會有任何錯誤訊息回傳,導致測試的流程不完整。(詳細可以參考:Moq中的Verifiable()的用途是什么? &  Moq测试基础说谈(三)——属性,常用方法)

Ref:
1.Moq中的Verifiable()的用途是什么? 
2.Moq测试基础说谈(三)——属性,常用方法)
3.[Day 6] Mockk與Mock的入門觀念