首页 > 代码库 > 使用Ninject+Moq在单元测试中抽象数据访问层
使用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、源码下载
使用Ninject+Moq在单元测试中抽象数据访问层
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。