LindDotNetCore~Mock對實際(ji)應用中的意義
Mock在單元測試里的意義
Mock測試就是在測試過程中,對于某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以
便測試的測試方法。一個鬧鐘根據時間來進行提醒服務,如果過了下午5點鐘就播放音頻文件
提醒大家下班了,如果我們要利用真實的對象來測試的話就只能苦苦等到下午五點,然后把耳朵放在音箱
旁,我們應該利用mock對象[1] 來進行測試,這樣我們就可以模擬控制時間了,而不用苦苦等待時鐘轉
到下午5點鐘了。
為什么要用Mock
- 模擬接口的方法實現,方便測試,不需要額外建立新的類型
- 對集成測試很有必要
- 體現了面向接口編程的重要性和必要性
- 一般將數據層進行Mock,通過對數據的模擬,來實現業務的準確性
輸入參數和預期結果
我們可以定義兩個對象,輸入參數是我們給測試方法傳遞的原始數據,它通過計算邏輯生產新的結果;
而預期結果是我們從真實環境中通過輸入參數產生的正式結果;在經過mock測試之后,我們把真實的預
期(qi)結果和測試產生(sheng)的(de)結果進(jin)行對比,這樣可以驗證業務邏輯的(de)正確性!
使用方法
//注冊一個mock對象,并重寫它的方法GetClosing,偽造它的返回結果
_report_CashFlowDao = new Mock<IReport_CashFlowDao>();
_report_CashFlowDao.Setup(p => p.GetClosing(270, new DateTime(2017, 10, 31))).Returns(() =>
{
return _sheetReportList;
});
下面業務(wu)層方法依(yi)賴于它,通過構造方法把它注入進來
_cashFlowService = new CashFlowService(_report_CashFlowDao.Object);
_cashFlowService.HandleOrder(1139);
通過上面代碼我們完成的一個業務場景的mock過程,并最終調用了它的HandlerOrder方法,在這里我們與
數據庫交互的IReport_CashFlowDao對象是被模擬出來的,我們可以為它提供多份模擬數據,以便更客觀
的測試結果的正確性!
待續……
回到目錄