C#單元測試--如何使用moq.mock進行依賴注入


在netcore出來之前的單元測試,調用每個接口都只需要遵循“調用方法,傳入參數”這個基本邏輯即可完成單元測試。

但是在使用ASP.Net Core 系列框架之后,開發人員廣泛使用依賴注入的方式來傳輸配置文件,或是某些依賴服務,這對於單元測試無疑是重大的障礙。因為Web項目的本體在原則上來講是不能將單元測試作為依賴項的,所以不方便進行依賴注入。

在這樣的背景之下,單元測試需要引入Mock一個概念。Mock的作用的是什么呢?就是模擬模仿依賴注入的內容,通過提前聲明的方式,來模擬程序調用到依賴注入的一些內容(包括配置文件,特定的實例等)

下面根據實際問題來進行學習一下:

    //現在要對如下一個使用IConfiguration接口依賴注入的Service進行單元測試的編寫
    public class DictionaryService : IDictionaryService
    {
        private IConfiguration _conf;

        public DictionaryService(IConfiguration conf)
        {
            _conf = conf;
        }
  
        public string GetDic()
        {
            return _conf.GetSection("Dictionary").Value;
        }
    }

    public class DicTest
    {
        private DictionaryService _serv = new DictionaryService(???);
        //在示例化測試Service類的時候我們會發現要傳入一個IConfiguration接口的依賴注入,但是不方便去實現,要怎么辦呢?
    }

在這種情況下我們就要用到moq.mock來實現對DictionaryService 用到的配置文件進行模擬,改為如下:

    using Moq;
    public class DicTest
    {
        private DictionaryService _serv;
        public DictionaryTest()
        {
            //在Mock中傳入需要模擬的類型
            var mockConf = new Mock<IConfiguration>();
            //對於在方法中所有使用的到的實例化方法都需要進行模擬,並傳入返回值
            mockConf.Setup(_ => _.GetSection("Dictionary").Value).Returns("this is a dic");
            _serv = new DictionaryService(mockConf.Object);//最后再實例化DictionaryService類就可以了
        }
    }

基本上學會了使用這一套方法就可以模擬各種類型的依賴注入了,一招鮮吃遍天。

PS:其實做單元測試先要對代碼的運行邏輯,以及各種微服務都了解的情況下才方便進行依賴注入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM