• 使用Ninject+Moq在单元测试中抽象数据访问层



    一、测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑
     
     
    二、步骤如下
    2.1 定义数据访问接口和实现
     public interface IDBAccess
        {
            List<string> GetList(string request);
        }  
     
         public class DBAccessImp : IDBAccess
        {
            public List<string> GetList(string request)
            {
                throw new NotImplementedException();
            }
        }
    2.2 使用Ninject维护接口和实现的关系,并在业务类的构造函数中进行注入
         a) 初始化Ninject
      
    static void Main(string[] args)
            {
                //创建Ninject内核实例
                IKernel ninjectKernel = new StandardKernel();
     
                //绑定接口到实现了该接口的类
                ninjectKernel.Bind<IDBAccess>().To<DBAccessImp>();
            } 
     
          b) 业务类(构造函数注入) 
     public class TestClass
        {
            private IDBAccess db = null;
            public TestClass(IDBAccess db)
            {
                this.db = db;
            }
     
            public List<string> GetList()
            { 
                //这里可认为是调用数据访问层的实现代码
                var response = this.db.GetList("Hello");
     
                return response;
            }
        } 
     
    2.3 在单元测试中使用Moq抽象模拟数据访问层逻辑
     
    [TestCategory("测试分类")]
            [TestMethod]
            public void GetListTest()
            {
                var mockDb = new Mock<IDBAccess>();
     
                var list = new List<string>();
                list.Add("Hello");
                list.Add("World");
                list.Add("James");
     
                //设置请求参数;返回参数等
                mockDb.Setup(m => m.GetList(It.IsAny<string>()))
                .Returns(list);
     
                TestClass test = new TestClass(mockDb.Object);
                //执行TestClass.GetList()方法时
                //不会实际的去调用数据访问层
                //而是用list的值作为GetList()方法的返回值(返回Hello、World、James集合)
                //这样以后每次测试GetList()中其他业务逻辑时,就不用初始化数据库数据,直接用
                //Moq模拟的数据即可
                test.GetList();
            }  

     3、源码下载

  • 相关阅读:
    SSM-Spring-02:Spring的DI初步加俩个实例
    python自动华 (五)
    python自动华 (三)
    python自动华 (四)
    python自动华 (二)
    python自动华 (一)
    java 下拉控件 转自 http://www.cnblogs.com/lhb25/p/form-enhanced-with-javascript-three.html
    java 正则《转载》
    jQuery 操作一览表
    JAVA多线程和并发基础面试问答
  • 原文地址:https://www.cnblogs.com/gossip/p/4100296.html
Copyright © 2020-2023  润新知