码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-15 22:58:26      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   使用   sp   


一、测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用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、源码下载

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

标签:style   blog   http   io   color   ar   os   使用   sp   

原文地址:http://www.cnblogs.com/gossip/p/4100296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!