Moq 和 RhinoMocks】的更多相关文章

Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 在使用Mock对象的过程中,充分体现出了“面向接口编程”的设计原则,同时也促成类的良好设计. 自行实现Mock对象是相当繁琐的工作,让人幸运的是,在.NET世界中有多个优秀的Mock框架可以供大家选择,目前最常使用的无非Moq与Rhino Mocks这两个框架.两者的最新版本在Mocking API方面的用…
我们在做单元测试的时候,利用mock可轻松构建出测试需要的类或接口,而不需要编写繁琐的测试代码. .net 下我知道Moq与Rhino Mocks这两个框架. Moq 网上介绍的比较多. Rhino Mocks 在Nop这个开源电商中有用到. 由于Moq源码和Rhino Mocks源码中测试示例特别多,我就不添加示例了: 几个Moq 和Rhino Mocks介绍的链接: http://blog.csdn.net/u010164936/article/details/44276987 http:/…
Moq & RhinoMocks 使用Mock对象进行测试一般都会有以下三个关键步骤: 使用接口来描述需要测试的对象 为实际的产品代码实现这个接口 以测试为目的,在Mock对象中实现这个接口 在使用Mock对象的过程中,充分体现出了“面向接口编程”的设计原则,同时也促成类的良好设计. 自行实现Mock对象是相当繁琐的工作,让人幸运的是,在.NET世界中有多个优秀的Mock框架可以供大家选择,目前最常使用的无非Moq与Rhino Mocks这两个框架.两者的最新版本在Mocking API方面的用…
RhinoMock入门(7)——Do,With和Record-playback 摘要: (一)Do(delegate)有时候在测试过程中只返回一个静态的值是不够的,在这种情况下,Do()方法可以用来在方法调用时添加自定义的行为.一般来说,Do()方法会替换方法调用.它的返回值会从模拟的调用中返回(即使是有异常发生也是这样).Do()的参数委托委托的方法的签名须和方法的签名匹配.只有当签名匹配时才能生效,且一个匹配生效一次.看官方给出的例子:[代码][代码]现在演讲者和名字分开在两个类...阅读全…
一.概念 Moq是利用诸如Linq表达式树和Lambda表达式等·NET 3.5的特性,为·NET设计和开发的Mocking库.Mock字面意思即模拟,模拟对象的行为已达到欺骗目标(待测试对象)的效果. Moq模拟类类型时,不可模拟密封类,不可模拟静态方法(适配器可解决),被模拟的方法及属性必须被virtual修饰. 二.示例 //待模拟对象 public interface ITaxCalculate { decimal GetTax(decimal rawPrice); } public c…
这个篇幅里面,记录单元测试与Moq模拟包的知识点. 单元测试 每一个模块,都应该有对应的单元测试.单元测试可以保证你的代码准确性,大大减少出现BUG的几率.一个好的单元测试,也是重构代码必不可少的部分. 我们可以直接在vs中,新增单元测试项目. 类库中,只要声明TestClass,就当做是单元测试. 单元测试分为三部分:准备,行为,断言.其中准备和行为,就是模拟程序代码执行.断言,就是判断程序执行结果与预期结果是否一致. 断言使用:Assert类来实现.详细参见:Assert类 [TestCla…
测试方法                             Console.WriteLine(mock.Object.GetCountThing()); 匹配参数   mock.Setup(x => x.DoSomething(It.IsRegex("[a-d]+", RegexOptions.IgnoreCase))).Returns("foo"); 属性   mock.VerifySet(foo => foo.Name = "foo…
刚用上Moq,就用它解决了一个IUnitOfWork的mock问题,在这篇博文中记录一下. 开发场景 Application服务层BlogCategoryService的实现代码如下: public class BlogCategoryService : IBlogCategoryService { private IBlogCategoryRepository _blogCategoryRepository; public BlogCategoryServiceImp(IBlogCategor…
 作者:[美]Adam Freeman      来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本文打算使用 Visual Studio 附带的内建单元测试支持,但其他一些.NET单元测试包也是可用的. 为了演示Visual Studio的单元测试支持,本例打算对示例项目添加一个 IDiscountHelper 接口的新实现. 在 Models 文件夹下新建类文件 MinimumDiscountHelpe…
在之前的例子中,我们创建了FakeRepository类来支持我们的测试.但是我们还没有解释如何穿件一个真实的repository实现,我们需要一个替代品.一旦我们有一个真的实现,我们可能不会再用它,因为它把我们的测试环境变得复杂. FakeRepository类,是IProductRepository接口的伪实现.我们创建伪实现,并手动添加特别的参数,使得FakeRepository类手动的仿制品.Moq是一个框架,让我们仿制变得快速,简单,容易. 1 将Moq添加到测试项目,而不是应用程序项…
参考资料: 1. http://www.codeproject.com/Tips/729646/TDD-using-MOQ 2. https://github.com/Moq/moq4/wiki/Quickstart 从https://github.com/Moq/moq4下载编译,且编译需要依赖Castle.Core这个包…
一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑     二.步骤如下 2.1 定义数据访问接口和实现 public interface IDBAccess { List<string> GetList(string request); } public class DBAccessImp : IDBAccess { public List<string>…
清楚问题所在: 先开个头,当我们对A进行单元测试时,可能会发现A的实现必须要依赖B.这时,我们在写单元测试时,就必须先创建B的实例,然后把B传给A再建立A的实例进行测试. 这样就会出现一些问题: 1.我们的单元测试会变得复杂而且脆弱.复杂是因为我们必须要花费精力去弄清楚B的逻辑.脆弱是因为如果B的逻辑更改了,我们对A的单元测试也可能会面临失败. 2.更严重的是,当我们测试失败时,我们无法很快定位到究竟是A除了问题还是B出了问题. 所以我们使用Moq这种技术来Mock “伪造” 一个B的实例,这样…
[TestFixture] public class InstantBatchBuyTest { private string _mallAbc; private string _itemCode; private int _quantity; private string _items; Mock<ICatalogService> mockCatalog; Mock<IShoppingCartService> mockShoppingCartService; [SetUp] pu…

MOQ

MOQ:(Minimum order Quantity) 最低订货数量   MOQ 即最小订购量(最小订单量)   对每个产品设定建议订单量是补货的方法之一.另外要注意订单的有效性,这是由供应商制定的规则.比如说最小订单量.包装数量和方式等等.采购者的建议订单量是在这个基础上制定的. 如果订单量比较少不能满足最小订单量,供应商不会送货,反之订单量比较高,就可能导致较高的库存.这就需要采购者平衡两者的关系. 注意:最小订购量与供应商的成本紧密相关.供应商会根据生产情况与成本控制,根据客户订货量确定…
From: http://www.cnblogs.com/wJiang/archive/2010/02/21/1670632.html Moq即Mock You Framework,故名思意是一个类似Mockery,JMock的Mock框架. 是google上的一个.net开源项目 项目扉页 相关下载 http://code.google.com/p/moq/ http://code.google.com/p/moq/downloads/list 先说说一般的使用Mock进行测试的基本过程: M…
From: http://www.cnblogs.com/techborther/archive/2012/01/10/2317998.html 前几天调查完了unity.现在给我的任务是让我调查Moq. 以下是自己找了资料,总结并实践的内容.如果有表述和理解错误的地方.恳请指正. 什么是Moq? Moq(英语发音是Mock-you 或者只是mock)是一个针对.Net开发的模拟库,它从开始就完全充分利用了.NET3.5(LINQ表达式树)和C#3.0的新特性(lambda表达式).它的目标是让…
Moq的使用心得 1.Moq中Mock Repository时最好是Mock Repository的接口,这样会避免不知名的错误. var mockClubRepository = new Mock<IClubRepository>(); mockClubRepository.Setup(mr => mr.GetById(It.IsAny<Guid>())) 2.Moq 中怎样返回空(How to return null in Moq): mockRepository.Set…
05 2013 档案 使用MVC4,Ninject,EF,Moq,构建一个真实的应用电子商务SportsStore(一) 摘要: 完成SportsStore电子商务平台,你将学会: 1.使用MVC4开发你的应用项目. 2.使用Ninject完成IOC注入. 3.使用Entity Framework 操作Sql server 数据库. 4.使用Moq测试你的项目.阅读全文 posted @ 2013-05-31 19:18 王志岳 阅读(2166) | 评论 (13) 编辑 06 2013 档案…
[ASP.Net MVC3 ]使用Moq让单元测试变得更简单 前几天调查完了unity.现在给我的任务是让我调查Moq. 以下是自己找了资料,总结并实践的内容.如果有表述和理解错误的地方.恳请指正. 什么是Moq? Moq(英语发音是Mock-you 或者只是mock)是一个针对.Net开发的模拟库,它从开始就完全充分利用了.NET3.5(LINQ表达式树)和C#3.0的新特性(lambda表达式).它的目标是让模拟以一种自然的方式与现有单元测试进行集成,使它更加简单.直观,以避免开发人员被迫重…
单元测试虽然是个很老的东西了,但平时写代码一般都不写测试,因为VS调试完全可以满足了,所以一直也就没有用过,刚好在<Pro.ASP.NET.MVC.3.Framework>中看到了Moq这个东西,于是就把vs自带的单元测试和也研究了一下.好吧,我们现在就开始吧. 新建MVC3项目如下: 然后右键 “解决方案--新建项目--测试”: 为了与Domain保持一致,所以建完后如下: 测试结果如下: Person: public class Person { public string ID { ge…
我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的时候不真正的将数据持久化.这种隔离我们一般使用抽象的方式,也就是利用接口或抽象类将持久化层隔离开,然后利用mock来模拟相应的接口或抽象类来完成相应的持久化类.MoQ就是这种Mock框架之一,MoQ使用了C#3.0,跟NMock相比MoQ使用起来更简单,而且是强类型的方式的,源码和dll可以到htt…
最近在做一个项目的单元测试时,遇到了些问题,解决后,觉得有必要记下来,并分享给需要的人,先简单说一下项目技术框架背景: asp.net core 2.0(for .net core)框架 用Entity Framework Core作ORM XUnit作单元测试 Moq作隔离框加 在对业务层进行单元测试时,因为业务层调用到数据处理层,所以要用Moq去模拟DbContext,这个很容易做到,但如果操作DbContext下的DbSet和DbSet下的扩展方法时,就会抛出一个System.NotSup…
回到目录 当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是否正确! 所以我们的单元测试在调用底层接口时,尤其是数据持久层的接口时,一般可以使用mock的方式,即模拟一个接口,期望的参数和期望的结果就够了,而没有必要真正去连接数据库,事实上,在业务测试里,使用真实的数据库没有什么意义!无非是加大测试的复杂度! 一个不错的mock测试工具 Moq,它在nuge…
使用MOQ来伪装和隔离被依赖对象,从而提高被测对象的测试效果. 安装 通过http://code.google.com/p/moq可以下载MOQ的最新版本.在SSL项目中,我们使用的是MOQ 3.1.416.3版本.在SCM中项目目录下的Lib目录下有该工具的二进制版本.直接在单元测试项目中引用即可. 准备工作 如果你需要测试项目中的Internal成员,你需要在AssemblyInfo.cs中添加如下的Attribute: #if DEBUG [assembly: InternalsVisib…
什么是Mock 当对代码进行测试的时候, 我们经常需要用到一些模拟(mock)技术. 绿色的是需要被测试的类, 黄色是它的依赖项, 灰色的无关的类 在一个项目里, 我们经常需要把某一部分程序独立出来以便我们可以对这部分进行测试. 这就要求我们不要考虑项目其余部分的复杂性, 我们只想关注需要被测试的那部分. 这里就需要用到模拟(Mock)技术. 因为, 请仔细看. 我们想要隔离测试的这部分代码对外部有一个或者多个依赖. 所以编写测试代码的时候, 我们需要提供这些依赖. 而针对隔离测试, 并不应该使…
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用Moq来Mock方法. 使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 02 Before 部分. Mock 对象 紧接着上文中的例子. 上一篇文章, 我在单元测试的时候, 把依赖项设为null: 然后便出现了NullReferenceException, 导致测试无法正常运行. 首先应该…
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnblogs.com/cgzl/p/9300356.html 本文介绍Moq的使用. 使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 03 Before 部分. Mock属性 属性是指 get set property. 接着上文, 我…
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnblogs.com/cgzl/p/9300356.html 第三篇文章, 关于属性Mock的介绍: https://www.cnblogs.com/cgzl/p/9304567.html 本文介绍使用Moq进行行为测试. 使用的代码: https://github.com/solenovex/Moq4-…
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnblogs.com/cgzl/p/9300356.html 第三篇文章, 关于属性Mock的介绍: https://www.cnblogs.com/cgzl/p/9304567.html 第四篇文章, 关于行为Mock的介绍: https://www.cnblogs.com/cgzl/p/9306728…