DotNetCore跨平臺~Moq框架實現模擬測試
阿新 • • 發佈:2018-12-29
當我們進行軟體開發時,一般會寫單元測試,而對於業務情景來說,一般是測試它的業務邏輯準確性,對於你的測試資料是否來自資料庫還是檔案,是否為真實還是模擬,並不是很關心!我關心的就是我的業務邏輯是否正確!
所以我們的單元測試在呼叫底層介面時,尤其是資料持久層的介面時,一般可以使用mock的方式,即模擬一個介面,期望的引數和期望的結果就夠了,而沒有必要真正去連線資料庫,事實上,在業務測試裡,使用真實的資料庫沒有什麼意義!無非是加大測試的複雜度!
一個不錯的mock測試工具 Moq,它在nuget上已經有了正式版,大家可以下載使用
下面介紹如何使用這個工具,我們以一個最簡單的例子來說一下,例如有一個介面,裡面一個方法,方法有輸入引數和返回值,我們可以這樣去模擬它的實現!
一個標準的介面,它的實現可能是從資料庫返回一個集合,而在測試用例裡,我只使用moq來幹這事,你完全可以不寫它的實現,先進行業務程式碼編寫,這就是TDD!
public interface IReport_BalanceStatementDao { IEnumerable<BalanceSheetReport> GetClosingBalance(int companyId, DateTime relateDate); }
測試用例可以這樣去設計
_report_BalanceStatementDao = newMoq.Mock<IReport_BalanceStatementDao>(); _report_BalanceStatementDao.Setup(p => p.GetClosingBalance(270, new DateTime(2017, 10, 31))).Returns(() => { return _balanceSheetReportList; }); _report_BalanceStatementDao.Setup(p=> p.GetClosingBalance(270, new DateTime(2017, 9, 30))).Returns(() => { return _balanceSheetReportList; }); _balanceStatementService = new BalanceStatementService(_report_BalanceStatementDao.Object);
執行你的測試用例,我們事實上並不GetClosingBalance是否實現,我們只關心它的輸入引數和返回值,只要業務層呼叫它時,輸入引數匹配它就可以返回遇期的結果!這才是
最重要的事!
感謝各位的閱讀!
CI、CD我們還在繼續!