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

  1. 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)

    开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...

  2. asp.net/wingtip/创建数据访问层

    一. 什么是数据访问层 在wingtip项目中,数据访问层是对以下三者的总称:1. product类等数据相关的实体类(class)2. 数据库(database),对实体类成员的存储3. 上述二者的 ...

  3. 通过myclipse建立一个简单的Hibernate项目(PS:在单元测试中实现数据的向表的插入)

    Hibernate的主要功能及用法: Ⅰ.Hibernate封装了JDBC,使Java程序员能够以面向对象的思想对数据库进行操作 Ⅱ.Hibernate可以应用于EJB的J2EE架构,完成数据的持久化 ...

  4. 在 ASP.NET 中创建数据访问和业务逻辑层(转)

    .NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均 ...

  5. ArcGIS Engine中的数据访问

    ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...

  6. 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

    package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...

  7. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  8. 数据访问层DAL(数据库访问抽象类DataProvider)

    晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对 ...

  9. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布

    在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...

随机推荐

  1. 快速清理Visual Studio起始页最近打开项目

    清除vs2008起始页最近打开项目 第一种:最简单的方式: 把以下内容保存为.bat批处理文件 @echo off@REG Delete HKCU\Software\Microsoft\VisualS ...

  2. 关于SQL表联接

    以SQL2008为例,Microsoft SQL Server 2008支持四种表运算符-JOIN,APPLY,PIVOT,UNPIVOT.JOIN表运算符是ANSI标准,而其他三种是T-SQL对标准 ...

  3. [leetcode]_Count and Say

    题目:一开始没看懂, 后头经过WA发现 输出 的意义 是 出现的次数+值. 1 => 一个1 => 11 11 => 两个1 => 21 111=> 三个1 => ...

  4. c语言学习第四天数据类型1

    int   代表整数,它在内存中占4个字节,二进制的表示方式是占用了三十二位,二进制中只包含0和1,那它的最大值就是全为1,但int是 有符号类型,所以最高位(左边的第一位)要拿出来做符号位,这样就只 ...

  5. JS正则表达式获取字符串中特定字符

    JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取. 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test  实 ...

  6. Yii-数据模型- rules类验证器方法详解

    public function rules(){ return array( array('project_id, type_id, status_id, owner_id, requester_id ...

  7. Windows7不能打开telnet功能

    在dos窗口中输入telnet命令提示如下: 解决方法是打开控制面板中的程序和功能,选择打开或关闭Window是功能,如下: 勾选上面的Telnet客户端,然后确定,出现下图.稍等片刻重新打开命令行, ...

  8. 4.0 流量控制preference

    从Android4.0以后,系统设置应用程序允许用户查看他们的应用在前台和后台使用了多少网络数据.用户可以禁用每 个应用在后台使用网络数据.为了避免用户禁用你的应用在后台访问网络,你应该更效率的使用网 ...

  9. linux kernel 0.11 bootsect

    bootsect作用 ①将自己移动到0x90000处 ②将setup从磁盘读到0x90200处 ③将system从磁盘读到0x10000处 寄存器 汇编代码中存在:数据段data seg 栈段 sta ...

  10. Maven系列--pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...