文章出處

回到目錄

當我們進行軟件開發時,一般會寫單元測試,而對于業務情景來說,一般是測試它的業務邏輯準確性,對于你的測試數據是否來自數據庫還是文件,是否為真實還是模擬,并不是很關心!我關心的就是我的業務邏輯是否正確!

所以我們的單元測試在調用底層接口時,尤其是數據持久層的接口時,一般可以使用mock的方式,即模擬一個接口,期望的參數和期望的結果就夠了,而沒有必要真正去連接數據庫,事實上,在業務測試里,使用真實的數據庫沒有什么意義!無非是加大測試的復雜度!

一個不錯的mock測試工具 Moq,它在nuget上已經有了正式版,大家可以下載使用

下面介紹如何使用這個工具,我們以一個最簡單的例子來說一下,例如有一個接口,里面一個方法,方法有輸入參數和返回值,我們可以這樣去模擬它的實現!

一個標準的接口,它的實現可能是從數據庫返回一個集合,而在測試用例里,我只使用moq來干這事,你完全可以不寫它的實現,先進行業務代碼編寫,這就是TDD!

    public interface IReport_BalanceStatementDao
    {
          IEnumerable<BalanceSheetReport> GetClosingBalance(int companyId, DateTime relateDate);
    }

測試用例可以這樣去設計

            _report_BalanceStatementDao = new Moq.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我們還在繼續!

回到目錄

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()