这里依然用上一次的moq官方文档中的接口为例 public interface IFoo { Bar Bar { get; set; } string Name { get; set; 此时,我们的伪对象作用发生了变化,由Stub变成了Mock , 因此,这个命名是非常失败的命名,正确的叫法应该是VerifySet ,当然Moq也有VerifySet ,他们做的事情也“几乎”一样。 "红领巾"); //使用SetupSet验证 fakeFoo.SetupSet(fake => fake.Name="红领巾"); fakeFoo.VerifyAll(); ok,说了不好的,再说点Moq fack.MyEvent += null, new EventArgs()); 很简单,第一个参数请保持为null,因为这个事件永远不会触发,应该监听的是fakeFoo.Object.MyEvent 另外Moq fack.MyEvent += null, fack, new EventArgs()); ---- ---- 本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/Moq
于是就到了我们的主角,Moq。 先让大家体验一下使用Moq的自动创建代码来替换我们手动创建的FakeLog。 接下去就会带你进入Moq的世界 ---- 本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/Moq%E5%9F%BA%E7%A1%80-%E4%B8%80.
VerifyNoOtherCalls(),处理已经验证的调用外,fake对象没有其他调用 ---- 本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/Moq
上一章介绍了手动创建单元测试依赖,和Moq的小demo 这一章我们看一下Moq的使用。 Stub在Moq中对应方法的是Setup,Mock对应的方法是Verify。 请注意这里的Mock和Moq框架中的Mock<T>不是一个概念!! 这也是Moq框架被众多开发人员诟病的一点。 这时有读者会问了,讲这么多概念,头都晕了,但是对我写单元测试没有一点用呀。 名不正,则言不顺;言不顺,则事不成理论不清晰的行动,总是不能在长期的战斗中获胜 在单元测试框架中,(尤其是Moq这种概念不清楚的),时刻清除你的伪对象在做什么,是非常重要的一点 ---- 本文会经常更新 ,请阅读原文: https://xinyuehtx.github.io/post/Moq%E5%9F%BA%E7%A1%80-%E4%BA%8C.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验
这一章是最后一讲,我们讲一下Moq中值得注意的小技巧,以及对Moq使用的评价 ---- MockBehavior:伪对象行为 在使用Moq创建伪对象时,可以在构造函数里传入MockBehavior MockBehavior 下面说说对Moq的看法。 Moq作为一个受限的单元测试框架,做到了免费,简单,易用。 应该说能够满足大部分的应用需求。 对于一个项目来说,如果Moq能够满足使用需求,那这个项目一定是SOLID的 当然,对于一些遗留代码来说,通常需要非受限框架对他进行支持(例如typemock isolator,MS Fakes) 不足之处是 ,Moq的概念存在一些混淆,往往容易将初学者带偏,一些API设计也有待商榷。 但是,Moq只是我们书写单元测试的工具,他真正的威力在于使用者。 兵无常势,水无常形。框架总会更新,创建测试的能力才是需要保留的。
Moq 官网: https://github.com/moq/moq4 Moq框架可以用来创建dummy, stub 和 mock. 在本文里把这三个东西都叫做mock对象吧. Moq使用一套API来创建stub和mock对象. 准备项目 一个简单的.NET Core控制台项目: https://github.com/solenovex/Moq-Tutorial-Code, 代码是里面的01 before. 所以, 我们需要Moq, 它可以提供一个Mock(模拟)版本的IPhysicalExamination, 并把它传递到审批类的构造函数里. 安装Moq 在单元测试项目添加Moq: ? Moq的第一篇先到这.
上一章区分了下stub,和mock 这一章我们的确要开始讲moq的api了 ---- Setup系列 Setup系列的函数用于伪造特定方法的返回值。 当然这个方法也会包含属性的方法 Setup:伪造方法 setup伪造方法返回值的格式为伪对象.Setup(fake=>fake.方法名).Returns(返回值) 这里用moq官方文档中的接口为例 public .Returns((string value)=>$"{value} {results} x{count}") .CallBack(()=>count++); ---- OK以上就是Moq results} x{count}") .CallBack(()=>count++); ---- 本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/Moq
www.cnblogs.com/cgzl/p/9304567.html 第四篇文章, 关于行为Mock的介绍: https://www.cnblogs.com/cgzl/p/9306728.html 本文介绍使用Moq 使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 05 Before 部分. 抛出异常 这里是指让mock对象抛出异常. 这是因为Moq在mock这种类的时候要求其方法必须是virtual的. 那么修改该方法为virtual: ? 这样的话测试就会通过: ? Moq的简介就到这里, 其实看官方文档会更快速一些: https://github.com/Moq/moq4/wiki/Quickstart 重构后的代码在: https://github.com/solenovex /Moq4-Tutorial-Code 里面的05 After.
使用MOQ来伪装和隔离被依赖对象,从而提高被测对象的测试效果。 安装 通过http://code.google.com/p/moq可以下载MOQ的最新版本。 在SSL项目中,我们使用的是MOQ 3.1.416.3版本。在SCM中项目目录下的Lib目录下有该工具的二进制版本。直接在单元测试项目中引用即可。
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用Moq来Mock方法. 上面的代码首先使用Moq创建了一个mock版本的IPhysicalExamination的实例. 这里用到了It这个类, 在Moq里, It这个类是用来做参数匹配的, it 就是"它"的意思, 它就代表需要被匹配的参数. Moq 关于It类的文档: http://www.nudoq.org/#! /Packages/Moq/Moq/It 它有下面几种用法: Is<TValue>(Expression<Func<TValue, Boolean>>) IsAny<TValue>() IsIn<TValue
本文是在Moq基础(五)的基础上做的补充 例如有方法 Foo 支持注入接口 IFoo 需要判断在 Foo 方法里面调用 IFoo 的 Foo 方法几次 public class Foo 这里请看Moq基础(五) 参数匹配,回调,和验证 里面有详细说到。 方法抛出 MockException 在里面会说到要求的是什么,但是实际调用的是什么 ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/Moq
/yiyungent.github.io' npm 初始化 项目 新建文件夹 moq mkdir moq 进入文件夹 cd moq npm 初始化项目 npm init 输入项目描述 完成 package.json 的创建 自定义命令 package.json 添加 bin: "bin": { "moq": "index.js" }, 完整 package.json 如下: { "name": "moq /issues" }, "homepage": "https://github.com/yiyungent/moq#readme" } bin 使得 moq 成为一个可执行命令,如 npm init /usr/bin/env node 表明 当前文件需以 Node.js 脚本执行 完成后,即可全局安装 moq,在项目所在目录执行: npm install -g 此时全局安装成功,下面测试命令: moq 项目下执行 npm install -g notebook 项目下执行 moq hexop './' '..
前言 今天大姚给大家推荐一个.NET开源、流行、使用简单的.NET模拟库:Moq。 Moq类库介绍 Moq是一个.NET开源、流行、使用简单的 .NET 模拟库,充分利用了.NET 的 Linq 表达式树和 lambda 表达式。 创建控制台应用 首先我们创建一个名为:MoqExercise 的.NET 8控制台应用: 安装Moq NuGet 创建模拟对象 以下是一个简单的示例,展示如何使用 Moq 来快速创建 IUserInfo Moq框架提供了Verify方法,帮助开发者可以轻松地验证这些方面。 ; } 模拟抛出异常 在单元测试中使用 Moq 框架时,可以模拟接口的方法抛出异常。
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 部分. 但是这样做很麻烦, 而Moq则提供了一种简单的方式来处理这种多层的/递归的mock: ? 这样写即可. 测试同样会通过: ? 而Moq可以记住这些mock属性的变化的值..... 新写一个测试: ? 这里使用mockObj.SetupProperty()方法来开始追踪属性. 这个测试会通过: ? 本文完成的代码在: https://github.com/solenovex/Moq4-Tutorial-Code 里面的03 After. 未完待续......
developer/article/1172539 第三篇文章, 关于属性Mock的介绍: https://cloud.tencent.com/developer/article/1172543 本文介绍使用Moq 使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 04 Before 部分. 代码: https://github.com/solenovex/Moq4-Tutorial-Code 04 After.
前言 今天大姚给大家推荐一个.NET开源、流行、使用简单的.NET模拟库:Moq。 Moq类库介绍 Moq是一个.NET开源、流行、使用简单的 .NET 模拟库,充分利用了.NET 的 Linq 表达式树和 lambda 表达式。 创建控制台应用 首先我们创建一个名为:MoqExercise 的.NET 8控制台应用: 安装Moq NuGet 创建模拟对象 以下是一个简单的示例,展示如何使用 Moq 来快速创建 IUserInfo Moq框架提供了Verify方法,帮助开发者可以轻松地验证这些方面。 ; } 模拟抛出异常 在单元测试中使用 Moq 框架时,可以模拟接口的方法抛出异常。
对于Stub 和 Mock ,可以看下面两张图例: Moq 官网: https://github.com/moq/moq4 Moq框架可以用来创建dummy, stub 和 mock. Moq使用一套API来创建stub和mock对象. 准备项目 一个简单的.NET Core控制台项目: https://github.com/solenovex/Moq-Tutorial-Code, 代码是里面的01 before. 所以, 我们需要Moq, 它可以提供一个Mock(模拟)版本的IPhysicalExamination, 并把它传递到审批类的构造函数里. 安装Moq 在单元测试项目添加Moq: Moq的第一篇先到这.
今天大姚给大家分享一个.NET开源、流行、使用简单的模拟库:Moq,助力简化单元测试! Moq类库介绍 Moq是一个.NET开源、流行、使用简单的模拟库,充分利用了.NET 的 Linq 表达式树和 lambda 表达式。这使得 Moq 成为最具生产力、类型安全且支持重构的模拟库。 创建控制台应用 首先我们创建一个名为:MoqExercise 的.NET 8控制台应用: 安装Moq NuGet 创建模拟对象 以下是一个简单的示例,展示如何使用 Moq 来快速创建 IUserInfo Moq框架提供了Verify方法,帮助开发者可以轻松地验证这些方面。 ; } 模拟抛出异常 在单元测试中使用 Moq 框架时,可以模拟接口的方法抛出异常。
故事背景: 供应商 A,Sourcing Percentage: 60%,MOQ: 25,Lead Time:90,Priority:999,供应商状态正常,没有特殊设置 供应商 B,Sourcing Percentage:40%,MOQ:30,Lead Time:90,Priority:999,供应商状态正常,没有特殊设置 大概1年前修改为此设置,从那以后,订单再也没有分配给B。 原因分析: 假设订单量为100,那么A分配60,B分配40,并且都大于各自的MOQ,可按照预期下单。 假设订单量为20,那么小于任何一个供应商的MOQ,没办法生成订单。 假设订单数量为50,那么A分配30,B分配20,但B的MOQ为30,无法下单,只能全部下给A,50个。
= raw_offer.get("moq", "0") moq = int(moq_str.replace("+", "")) if moq_str else 0 ", 0)), "minPrice": min_price, "maxPrice": max_price, "moq ": moq, "supplierName": raw_offer.get("supplierName", ""), "supplyType" 起订量得分(起订量越小得分越高,0-30分) max_moq = max([o["moq"] for o in offers]) if offers else 1000 moq_score = (1 - min(offer["moq"] / max_moq, 1)) * 100 * weights["moq"] # 3.