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:其實做單元測試先要對代碼的運行邏輯,以及各種微服務都瞭解的情況下才方便進行依賴注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章