回到目录

当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是否正确!

所以我们的单元测试在调用底层接口时,尤其是数据持久层的接口时,一般可以使用mock的方式,即模拟一个接口,期望的参数和期望的结果就够了,而没有必要真正去连接数据库,事实上,在业务测试里,使用真实的数据库没有什么意义!无非是加大测试的复杂度!

一个不错的mock测试工具 Moq,它在nuget上已经有了正式版,大家可以下载使用

下面介绍如何使用这个工具,我们以一个最简单的例子来说一下,例如有一个接口,里面一个方法,方法有输入参数和返回值,我们可以这样去模拟它的实现!

一个标准的接口,它的实现可能是从数据库返回一个集合,而在测试用例里,我只使用moq来干这事,你完全可以不写它的实现,先进行业务代码编写,这就是TDD!

    public interface IReport_BalanceStatementDao
{
IEnumerable<BalanceSheetReport> GetClosingBalance(int companyId, DateTime relateDate);
}

测试用例可以这样去设计

            _report_BalanceStatementDao = new Moq.Mock<IReport_BalanceStatementDao>();
_report_BalanceStatementDao.Setup(p => p.GetClosingBalance(, new DateTime(, , ))).Returns(() =>
{
return _balanceSheetReportList;
});
_report_BalanceStatementDao.Setup(p => p.GetClosingBalance(, new DateTime(, , ))).Returns(() =>
{
return _balanceSheetReportList;
});
_balanceStatementService = new BalanceStatementService(_report_BalanceStatementDao.Object);

运行你的测试用例,我们事实上并不GetClosingBalance是否实现,我们只关心它的输入参数和返回值,只要业务层调用它时,输入参数匹配它就可以返回遇期的结果!这才是

最重要的事!

感谢各位的阅读!

CI、CD我们还在继续!

回到目录

DotNetCore跨平台~Moq框架实现模拟测试的更多相关文章

  1. .net测试篇之Moq框架简单使用

    系列目录 Moq库简介及安装 Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流行赖于依赖注入模式的兴起 ...

  2. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  3. 模拟测试—moq:简单一两句

    在Xunit的基础上,说话模拟测试. 假如我们有这样一个控制器里面有这样一个方法,如图 我们在对Bar测试得时候,如果测试未通过,错误有可能来至于Bar,也有可能错误来至于serverde Foo方法 ...

  4. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  5. 简单使用Moq框架

    Moq框架简单使用   系列目录 Moq库简介及安装 Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流 ...

  6. .NET 跨平台界面框架和为什么你首先要考虑再三

    ​​​原文地址 现在用 C# 来开发​跨平台应用已经有很成熟的方案,即共用非界面代码,而每个操作系统搭配特定的用户界面代码.这个方案的好处是可以直接使用操作系统原生的控件和第三方控件,还能够和操作系统 ...

  7. DotNetCore跨平台~文章索引~永久更新

    本索引目录主要包括仓储大叔对dotnet core架构的研究与知识积累,从2016年开始进行撰写,到今天已经有一年多了,其中有一些小知识,小技巧,小应用,希望给大家在开发时一些启发,也希望dotnet ...

  8. DotNetCore跨平台~Quartz定时单次任务

    之前写过一篇文件<DotNetCore跨平台~Quartz热部署的福音-监控文件夹的变化>,今天主要把框架优化了一下,支持外部触发,并支持外部将参数以JobDataMap形式进行输入,然后 ...

  9. DotNetCore跨平台~Dapper的使用

    回到目录 Dapper作为小型ORM的代表作品被我们应用到了dotnet core的项目中,下面将把自己在项目中使用dapper进行curd操作的过程写一下,后期可能会遇到一些问题,大叔也会在这个系列 ...

随机推荐

  1. OpenTSDB-Querying or Reading Data

    Querying or Reading Data OpenTSDB offers a number of means to extract data such as CLI tools, an HTT ...

  2. 基于MyBatis的数据服务接口

    背景 作为软件系统开发,数据操作是系统开发不可避免的一个重要组成部分.因为其重要性围绕着数据操作也出现了众多框架.成熟框架是为了普适众多数据操作要求的,因此为了更好的实现技术落地,需要对框架进行丰富和 ...

  3. Composer使用笔记

    安装 1.windows中安装Composer 一般来说,windows下安装composer有两种办法,一种是直接下载并运行Composer-Setup.exe,这种方法在中国似乎很难完成安装.另一 ...

  4. Qt----拖拽

    最近比较忙,今天此才有时间来继续学习下Qt.Qt的拖拽可以按字面意思分为拖和拽两部分.一般来说我们常见的拖拽分别由两个程序合作完成.例如我们经常把桌面的文件拖拽进其他目录: 这个拖拽在Qt中由两方合作 ...

  5. 解决No enclosing instance of type * is accessible

    写一个内部类,并在构造函数中初始化时,遇到报错,搜索问题后发现,有网友出现过类似的问题,下面这个是说的浅显明白的,并确实解决了问题.于是,以下内容照搬过来,不再多费键盘了. public class ...

  6. 关于IDEA无法引入包和类的情况

    原因:修改一些包结构后,会出现无法将类引入的情况. 通过清理缓存解决:

  7. LINQ学习系列-----1.4 匿名对象

    本篇内容接着上一篇继续讲述,本篇简单讲解匿名对象 一.匿名对象介绍              上代码: var result=new { ID=, Name="张三", Age= ...

  8. 状态压缩- Brackets

    标签: ACM 题目: We give the following inductive definition of a "regular brackets" sequence: t ...

  9. 深入了解Android蓝牙Bluetooth——《进阶篇》

    在 [深入了解Android蓝牙Bluetooth--<基础篇>](http://blog.csdn.net/androidstarjack/article/details/6046846 ...

  10. gulp 小坑一个

    学习gulp的时候,看到很多人写到 gulp.task('styles', function() { return gulp.src('src/styles/main.scss') .pipe(sas ...