Moq的使用方法_迷惘小书童的博客

文章推薦指數: 80 %
投票人數:10人

Moq的使用方法 ... 我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们 ... Moq的使用方法 迷惘小书童 于 2019-03-1219:47:38 发布 3690 收藏 2 分类专栏: 单元测试 文章标签: Moq 单元测试 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/m0_37080285/article/details/88427264 版权 单元测试 专栏收录该内容 2篇文章 0订阅 订阅专栏 我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的时候不真正的将数据持久化。

这种隔离我们一般使用抽象的方式,也就是利用接口或抽象类将持久化层隔离开,然后利用mock来模拟相应的接口或抽象类来完成相应的持久化类。

Moq就是这种Mock框架之一。

Moq(发音为“Mock-you”或者只是“Mock”)可以充分利用.NET的Linq表达式树和lambda表达式,这使它成为最高效,类型安全的提供重构友好的模拟库。

它支持模拟接口和类。

它的API非常简单直接,不需要任何先前的知识或经验来模拟概念。

具体的语法问题可以参考Moq的快速入门。

下面用的都是xuint的例子 方法 publicinterfaceITest { stringTest(); } 测试代码 [Fact] publicvoidTestTest() { vartest=newMock(); test.Setup(p=>p.Test()).Returns("lfm"); Assert.Equal("lfm",test.Object.Test()); } 匹配参数 publicinterfaceIMatchTest { stringTest(inttest); } 测试代码 vartestMatch=newMock(); testMatch.Setup(p=>p.Test(It.Is(i=>i%2==0))).Returns("偶数"); testMatch.Setup(p=>p.Test(It.Is(i=>i%2!=0))).Returns("奇数"); Assert.Equal("偶数",testMatch.Object.Test(4)); Assert.Equal("奇数",testMatch.Object.Test(3)); 上边测试代码模拟实现IMathTest接口实例,其中如果Test方法的参数是偶数,其返回值为“偶数”。

这里的IT用来过滤参数的类,其具体解释可以参见MoQ的文档 属性 publicinterfaceIPropertiesTest { intTest{get;set;} } 测试代码 vartestProperties=newMock(); testProperties.Setup(p=>p.Test).Returns(1); Assert.Equal(1,testProperties.Object.Test); 或者 vartestProperties=newMock(); testProperties.SetupProperty(p=>p.Test,1); Assert.Equal(1,testProperties.Object.Test); Callback 当执行某方法时调用其内部输入的Action委托 intcount=0; vartestProperties=newMock(); testProperties.Setup(p=>p.Test).Returns(1).Callback(()=>count++); Assert.Equal(1,testProperties.Object.Test); Assert.Equal(1,count); 在调用Test方法是执行了count++ Verification 判断某方法或属性是否执行过如果代码如下: vartestProperties=newMock(); testProperties.Setup(p=>p.Test).Returns(1); testProperties.Verify(p=>p.Test); Assert.Equal(1,testProperties.Object.Test); 会抛出异常,因为第3行执行时Test方法还没有被调用过,改为如下代码可以通过测试 vartestProperties=newMock(); testProperties.Setup(p=>p.Test).Returns(1); Assert.Equal(1,testProperties.Object.Test); testProperties.Verify(p=>p.Test); 实际的单元测试 [HttpPost("DelyTime")] publicScriptOutputDelyTime() { try { returnscriptService.DelyTime(GetScriptInput()); } catch(Exceptionex) { returnnull; } } privateScriptInputGetScriptInput() { byte[]datas=newbyte[HttpContext.Request.ContentLength.Value]; HttpContext.Request.Body.Read(datas,0,datas.Length); stringstream=System.Text.Encoding.UTF8.GetString(datas); returnJsonConvert.DeserializeObject(stream); } 测试上面DelyTime()方法,会发现,他有调用到GetScriptInput(),然后里面有调用到HttpContext。

但是我们现在是在单元测试,并没有具体的浏览器环境,那么就要用到Moq来模拟一下。

[Fact] publicvoidDelyTime() { varmock=newMock(); varrequestMock=newMock(); varcontextMock=newMock(); varstreamMock=newMock(); ServiceControllerserviceController=newServiceController(mock.Object); ScriptOutputscriptOutput=newScriptOutput(); serviceController.ControllerContext=newControllerContext(); serviceController.ControllerContext.HttpContext=contextMock.Object; requestMock.SetupGet(x=>x.ContentLength).Returns(0); requestMock.SetupGet(x=>x.Body).Returns(streamMock.Object); contextMock.SetupGet(x=>x.Request).Returns(requestMock.Object); mock.Setup(x=>x.DelyTime(It.IsAny())).Returns(scriptOutput); varresult=serviceController.DelyTime(); Assert.Equal(scriptOutput,result); } 其中的HttpContext也可以不用Mock用下列的方式 serviceController.ControllerContext.HttpContext=newDefaultHttpContext(); 迷惘小书童 关注 关注 1 点赞 踩 2 收藏 打赏 0 评论 Moq的使用方法 我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的时候不真正的将数据持久化。

这种隔离我们一般使用抽象的方式,也就是利用接口或抽象类将持久化层隔离开,然后利用mock来模拟相应的接口或抽象类来完成相应的持久化类。

Moq就是这种Mock框架之一。

Moq... 复制链接 扫一扫 专栏目录 EntityFramework.MoqHelper:与EntityFramework6.*和Moq库一起使用的辅助方法,模拟访问数据库的EntityFramework主要方法 04-28 EntityFramework.MoqHelper 与EntityFramework6.*和Moq库一起使用的辅助方法,它们模拟访问数据库的EntityFramework主要方法。

EntityFramework.MoqHelper是一个简单的库,但是在使用实体框架进行模拟时有很多帮助。

要通过模拟创建对象,它需要执行许多设置,尤其是对于进行查询的测试方案。

这些所需的许多代码都封装在该库中,并创建了一些用于处理对象列表并对其进行查询的逻辑。

使用流畅的界面,您可以执行不同的设置来模拟DbContext和DbSet对象。

为了模拟EF对象,选择了Moq库是因为Moq通常是一个稳定且非常流行的Mock库。

该库的重点是在使用EF进行测试时(无需直接访问数据库)便利开发人员的生活。

要在EF中进行模拟,您必须将与要使数据库在DbSet中可用的每个操作相关的每个方法配置为Db moq的常用使用方法(推荐) 10-21 主要介绍了moq的常用使用方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 参与评论 您还未登录,请先 登录 后发表或查看评论 Moq.Dapper:Dapper方法的Moq扩展 05-22 起订量 Dapper方法的Moq扩展。

用法示例 用简单的类型模拟对Query的调用: [Test] publicvoidQueryGeneric() { varconnection=newMock(); varexpected=new[]{7,77,777}; connection.SetupDapper(c=>c.Query(It.IsAny(),null,null,true,null,null)) .Returns(expected); varactual=connection.Object.Query("",null, Mock框架Moq的使用 最新发布 chinaherolts2008的博客 07-21 233 Intro# Moq是.NET中一个很流vb.net教程行的Mock框架,使c#教程用Mock框架我python基础教程们可以只针对我java基础教程们关注的代码进行测试,对于sql教程依赖项使用Mock对象配置预期的依赖服务的行为。

Moq是基于Castle的动态代理来实现的,基于动态代理技术动态生成满足指定行为的类型 在一个项目里,我们经常需要把某一部分程序独立出来以便我们可以对这部分进行测试.这就要求我们不要考虑项目其余部分的复杂性,我们只想关注需要被测试的那部分.. 使用Moq框架的各种模拟设置 寒冰屋的专栏 06-07 677 目录 介绍 返回语句以返回值 执行某些函数后执行某些任务 从模拟函数顺序返回多个值 第二次抛出异常 CallBase()调用原始实现 模拟泛型类 边界线 介绍 在本文中,我们将了解使用Moq框架的各种模拟设置。

基本上,这些设置有助于应用程序的单元测试。

如果您有单元测试的经验,那么您可能已经知道这些概念。

我们知道模拟是一种我们用自定义或伪造操作模仿原始操作的操作。

在应用程序开发时,有时我们会看到一个组件依赖于另一个组件,并且我们不能等到依赖对象完成。

在这种情况下,模拟的概念就出现了。

模 moq的常用使用方法 weixin_34107739的博客 07-22 203   测试方法  1 // 准备 Mock IFoo 接口 2 var mock = new Mock<IFoo>();  3 // 配置准备模拟的方法,当调用接口中的 DoSomething 方法,并传递参数 "bing" 的时候,返回 true 4 mock.Setup(foo => foo.DoSomething("ping")).Returns(true);    ... Mock接口测试-框架Moco实现带cookies的get,post请求,带heads和重定向的请求 Queen_xzx的专栏 07-25 412 框架Moco实现带cookies的get请求 json文件 [ { "description":"这是一个get请求带参数的Cookies", "request":{ "uri":"/getCookies", "method":"get", "cookies":{ "login":"true" } ... 【PROASP.NEMVC4学习札记】使用Moq辅助进行单元测试 weixin_30258901的博客 04-29 71 清楚问题所在: 先开个头,当我们对A进行单元测试时,可能会发现A的实现必须要依赖B。

这时,我们在写单元测试时,就必须先创建B的实例,然后把B传给A再建立A的实例进行测试。

这样就会出现一些问题: 1、我们的单元测试会变得复杂而且脆弱。

复杂是因为我们必须要花费精力去弄清楚B的逻辑。

脆弱是因为如果B的逻辑更改了,我们对A的单元测试也可能会面临失败。

2、更严重的是,当我们测试失败时,我们无法很... MOQL简介 热门推荐 colorknight的专栏 03-24 1万+ MOQL(MemoryObjectQueryLanguage)是一款基于Java的面向内存对象过滤、查询及统计分析的开源工具。

它能够对内存中存储的集合对象,集合中的对象可以是Bean对象,数组对象、Map对象等各种对象,完成类似于数据库提供的查询及统计分析功能。

它的语法结构类似于SQL,支持top、distinct、where、group、having、order、聚集运算(count、sum SAP物料的最小订购量、及舍入值的测试 matinal當冬夜漸暖。

公众号:matinal 10-20 933 在设定方面,最小订购量(MOQ)可以位于物料主数据中,也可以在采购信息记录中。

在物料主数据中,是设置于MRP1的最小批量(MinimumLotSize)舍入值,信息记录中的是在采购组织数据中的最小数量(MinimumQty).最小包装量(MPQ)在物料主数据的舍入值或舍入参数文件(roundingvalue、roundingprofile,后者优先级高)及信息记录中的舍入参数文件(RoundingProfile)。

物料主数据中的最小批量、舍入值,在MRP运行时都会起作用。

如果同时.. Moq基础判断方法被执行 lindexi 01-29 807 如果想知道注入的类的某个方法被使用了几次,就可以通过mock提供的方法进行判断方法有没被执行或被使用多少次 Moq基础 weixin_30275415的博客 10-26 84 一、概念   Moq是利用诸如Linq表达式树和Lambda表达式等·NET3.5的特性,为·NET设计和开发的Mocking库。

Mock字面意思即模拟,模拟对象的行为已达到欺骗目标(待测试对象)的效果.  Moq模拟类类型时,不可模拟密封类,不可模拟静态方法(适配器可解决),被模拟的方法及属性必须被virtual修饰. 二、示例 1//待模拟对象 2publicinter... c#关于Moq的使用细节 平旦 01-03 2270 c#关于Moq的使用细节 最近一直在做关于unittest方面的工作,使用的是Moq中的Mock方法。

之前自学的时候在网上看的教程云里雾里,在工作过程中有的方法通过实验和询问同事终于搞懂了一些,现在把自己使用到的方法记录下来,持续更新 vartest=newMock(); test.Setup(x=>x.testvalue).Returns(val... Moq的一些基本用法 weixin_34114823的博客 01-08 468 本篇体验Moq的一些基本用法。

首先通过NuGet安装Moq。

包括: 模拟方法的返回值模拟方法后执行回调函数模拟方法依次返回多个值模拟第二次调用方法返回异常直接返回被模拟方法的原始返回值模拟泛型类  模拟方法的返回值publicclassHelperClass { publicvirtualBooleanIsEnabled... 关于Moq的使用策略 tomcat的专栏 11-12 1715 Moq是.NET平台下的单元测试框架, Moq用例集合 测试驱动 05-23 1705 Moq是我最熟悉的MockingFr,过去曾经短暂地切换到RhinoMocks Moq测试基础说谈(一)——简介,下载 沙漠黑鸟的专栏 02-15 2374 Moq,就是Mockyou。

读音可以读成Mock~you。

是Mock框架的一种。

用于测试中的Mock测试。

Mock是模拟的意思。

Mock是模拟对象的一种技术。

它可以用于以下情况(引用): ----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情) ----- 真实对象很难被创建(比如具体的web容器) ----- 真实对象的某些行为很难触发(比如网络错误) ----- “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 ©️2022CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页 迷惘小书童 CSDN认证博客专家 CSDN认证企业博客 码龄6年 暂无认证 69 原创 88万+ 周排名 7万+ 总排名 8万+ 访问 等级 1339 积分 8 粉丝 26 获赞 11 评论 78 收藏 私信 关注 热门文章 将Winform移植到.NETCore3.0 11383 WPF自定义最大化最小化关闭按钮 9756 Android中Gson的使用 8460 WPF多个按钮点击切换样式 5797 Moq的使用方法 3689 分类专栏 Android 1篇 DataGrid 1篇 C# 26篇 WPF 20篇 设计模式 24篇 单元测试 2篇 ORM 1篇 Access 2篇 SQL 2篇 InstallShield 2篇 .NETCore 1篇 Vue 1篇 最新评论 WPF中TextBox更改完了之后进行操作 抹茶芭菲丶: 请问这个SourceUpdated事件为啥要在失去TextBox的焦点才会执行,可以在TextBox更改Text的时候立即执行吗 WPF自定义最大化最小化关闭按钮 迷惘小书童: 已更新,你看看 WPF自定义最大化最小化关闭按钮 这个月我要学一下WCF: 麻烦把MetroWindowButtonStyle1这个资源发一下 WPF的TreeView的节点选中但失去焦点样式 User:你的影子: 可以用:但是这两行我用不了 WPF中TextBox更改完了之后进行操作 哈哈哈特虎: 好的谢谢博主,我再去学习学习 您愿意向朋友推荐“博客详情页”吗? 强烈不推荐 不推荐 一般般 推荐 强烈推荐 提交 最新文章 海康相机丢帧问题 c#调用C++的dll报错“外部组件发生异常” Android中Gson的使用 2022年2篇 2021年2篇 2020年7篇 2019年34篇 2018年22篇 2017年4篇 目录 目录 分类专栏 Android 1篇 DataGrid 1篇 C# 26篇 WPF 20篇 设计模式 24篇 单元测试 2篇 ORM 1篇 Access 2篇 SQL 2篇 InstallShield 2篇 .NETCore 1篇 Vue 1篇 目录 评论 被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言 查看更多评论 打赏作者 迷惘小书童 你的鼓励将是我创作的最大动力 ¥2 ¥4 ¥6 ¥10 ¥20 输入1-500的整数 余额支付 (余额:--) 扫码支付 扫码支付:¥2 获取中 扫码支付 您的余额不足,请更换扫码支付或充值 打赏作者 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值



請為這篇文章評分?