首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Moq基础(三)

上一章区分了下stub,和mock 这一章我们的确要开始讲moq的api了 ---- Setup系列 Setup系列的函数用于伪造特定方法的返回值。...当然这个方法也会包含属性的方法 Setup:伪造方法 setup伪造方法返回值的格式为伪对象.Setup(fake=>fake.方法名).Returns(返回值) 这里用moq官方文档中的接口为例 public...例如我们有时候会期望返回值和输入参数有关,例如DoSomething方法传入"fitness"是返回"fitness makes me slim",那么可以用如下写法 fakeFoo.Setup(fake...,返回值不同的情况,例如第一次"fitness"是返回"fitness makes me slim x1",第二次就会返回"fitness makes me slim x2", 这时我们就需要另外一个函数...CallBack,CallBack可以让你在方法调用的时候执行一个回调函数。

1.1K20

使用 Moq 测试.NET Core 应用 -- Mock 方法

另外一个测试方法我也这么改一下, 然乎重新Build. Run All Tests: ? 还是红色的, 但现在是测试没通过, 并不是抛出异常. 测试没通过的意思就是期待值和实际返回值不符....可以看到这个Mock版本依赖项的IsHealthy()方法的返回值是false....这里用到了It这个类, 在Moq里, It这个类是用来做参数匹配的, it 就是"它"的意思, 它就代表需要被匹配的参数. ...MockBehavior.Loose, 即使方法没有被预先设置, 调用它的时候也不会抛出异常. 它会返回该方法返回类型的默认值....可以感觉到: Loose Mock, 可以少写一些设定代码, 可以返回默认值, 不易让测试中断 Strict Mock, 需要写跟多的设定代码, 每个被调用的方法都需要进行设定, 所以也更容易让测试中断

2.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    5 分钟 .NET 单元测试极简入门

    调用 BookService 的方法,并使用 FluentAssertions 来验证返回值或异常是否符合预期。 运行所有的测试,并检查是否通过。 步骤 1 创建项目和添加引用很简单,我这里不再详述。...var result = _sut.GetBooksByAuthor(author); // 调用参数为 author 的 GetBooksByAuthor 方法,并将返回值赋值给 result...方法,第二部分表示它会输入一个有效的 Author Name,第三部分表示它会返回匹配的 Books。...顾名思义,安排就是准备一些测试数据和设置模拟返回值,执行就是执行 _sut 的被测试方法,断言就是根据执行方法拿到的结果,判断是否正确,以决定是否通过测试。详情我都写在代码的注释里了,请详细阅读。...(startYear, endYear); // 调用年份范围不匹配任何书籍的 GetBooksByPublishedYearRange 方法 // Assert result.Should

    42850

    使用 Moq 测试.NET Core - Why Moq?

    这个通常是由团队对系统的理解决定, 可以针对一个类, 也可以针对多个类....例如我们可以使用Stub把相关数据放到内存里查询而不是查询真实的数据库; 如果某个测试类需要依赖项的某个Property的值, 那么stub就设定这个值就行. Mock, (行为/交互测试)....与Stub不同的是, Mock期待的不是返回值, Mock期待的是动作的执行. 它是依赖项的动态包装, 它可以对哪个方法以什么样的顺序被待测试系统(SUT)调用的这个期待行为进行预编程....Run All, 测试也会成功: ? 添加依赖 这时, 有一些需求的变化, 球员转会审批前, 需要通过体检. 首先在转会申请类里面添加两个球员的属性: ? 然后添加一个体检的接口: ?...所以, 我们需要Moq, 它可以提供一个Mock(模拟)版本的IPhysicalExamination, 并把它传递到审批类的构造函数里. 安装Moq 在单元测试项目添加Moq: ?

    3.1K30

    【ASP.NET Core 基础知识】--测试--单元测试和集成测试

    我们可以使用 Moq 来模拟 IDataService 接口,并验证调用。...} } 在这个测试中,我们使用 Moq 创建了一个 IDataService 的模拟对象,并设置了 GetData 方法的返回值为 42。...在测试的 Act 部分,我们调用了 GetData 方法,并验证了返回值是否为 42,并且确保 GetData 方法被调用了一次。...它们通常会返回预先定义好的值或者固定的行为,而不是模拟真实对象的行为。 Fake 对象:Fake 对象是一个实现了与真实对象相同的接口,但实现方式更加简化的对象。...函数覆盖率:函数覆盖率衡量了在测试执行过程中被调用的函数或方法的比例。如果一个函数或方法被至少一个测试用例调用了,则认为它是被覆盖的。 语句覆盖率:语句覆盖率衡量了在测试执行过程中被执行的语句的比例。

    39000

    干货 | 如何写一个更好的Python函数?

    当给定函数没有返回值时,有一些常见的原因: “它所做的只是[一些与I / O相关的事情,比如将一个值保存到数据库中]。我不能返回任何有用的东西。” 我不同意。如果操作顺利完成,函数可以返回True。...其次,即使这样做不可行,复制某个参数的成本太高,你也可以回到上一条建议。 “我需要返回多个值。单独返回一个值是没有意义的。” 可以使用元组返回多个值。...加上你给所有这些新函数取了合适的名称,因此生成的代码读起来也会更容易。 幂等和函数纯度 不管被调用了多少次,幂等函数总是在给定相同参数集的情况下返回相同的值。...对add_three()的每次调用都会返回不同的值。 如果它被调用两次,用户可以第一次输入3,第二次输入7,分别调用add_three()返回6和10。...幂等函数很容易测试,因为在使用相同的参数时,它们总是返回相同的结果。 测试仅仅是检查通过不同调用返回值的预期值。更重要的是,这些测试很快,这是单元测试中一个重要且经常被忽视的问题。

    60720

    干货 | 如何写一个更好的Python函数?

    当给定函数没有返回值时,有一些常见的原因: “它所做的只是[一些与I / O相关的事情,比如将一个值保存到数据库中]。我不能返回任何有用的东西。” 我不同意。如果操作顺利完成,函数可以返回True。...其次,即使这样做不可行,复制某个参数的成本太高,你也可以回到上一条建议。 “我需要返回多个值。单独返回一个值是没有意义的。” 可以使用元组返回多个值。...加上你给所有这些新函数取了合适的名称,因此生成的代码读起来也会更容易。 幂等和函数纯度 不管被调用了多少次,幂等函数总是在给定相同参数集的情况下返回相同的值。...对add_three()的每次调用都会返回不同的值。 如果它被调用两次,用户可以第一次输入3,第二次输入7,分别调用add_three()返回6和10。...幂等函数很容易测试,因为在使用相同的参数时,它们总是返回相同的结果。 测试仅仅是检查通过不同调用返回值的预期值。更重要的是,这些测试很快,这是单元测试中一个重要且经常被忽视的问题。

    61010

    怎样才能写好一个 Python 函数

    当给定函数没有返回值时,有一些常见的原因: “它所做的只是[一些与 I/O 相关的事情,比如将一个值保存到数据库中]。我不能返回任何有用的东西。” 我不同意。...其次,即使这样做不可行,复制某个参数的成本太高,你也可以回到上一条建议。 “我需要返回多个值。单独返回一个值是没有意义的。” 可以使用元组返回多个值。...总是返回一个有用的值,调用者总是可以自由地忽略它们。 5. 函数长度 让你读一个 200 行的函数,并说出它是做什么的,你是什么感受? 函数的长度直接影响可读性,从而影响可维护性。...对 add_three()的每次调用都会返回不同的值。 如果它被调用两次,用户可以第一次输入 3,第二次输入 7,分别调用 add_three()返回 6 和 10。...幂等函数很容易测试,因为在使用相同的参数时,它们总是返回相同的结果。 测试仅仅是检查通过不同调用返回值的预期值。更重要的是,这些测试很快,这是单元测试中一个重要且经常被忽视的问题。

    57520

    acedGetInput

    即便如此,只有当用户输入函数返回值RTKWORD(或RTSTR,在acedDragGen()的情况下)时,调用才会成功。...Bit 3 (= 8 if set) RSG_NOLIM--使用户可以在当前绘图限制之外输入一个点。即使当前设置了AutoCAD LIMCHECK系统变量,此条件也适用于下一个用户输入函数。...测试代码 //如果使用当前数据库,一定要保存文件否则会出错, //当前数据库有自动保存操作,即使不操作,如果不保存,也会出错。...用户输入的关键字值可以通过后续调用acedGetInput()来检索。(如果用户输入函数是acedGetKword(),则关键字值已经可用。)...本地和全局关键字之间不需要一对一匹配(也就是说,如果不匹配,函数调用不会失败),但是: 1.如果本地关键字(下划线之前)多于全局关键字(下划线之后),则接受没有相应全局关键字的本地关键字,但将返回一个空字符串

    25430

    TypeScript 官方手册翻译计划【四】:函数

    通过添加一个类型参数 Type 到函数中,并在两个地方使用这个参数,我们已经让函数的输入值(数组)和输出值(返回值)建立了一个联系。...但问题在于,函数承诺返回一个与传入参数相同类型的对象,而不是某个匹配约束条件的对象。...注意,当参数可选的时候,调用者总是会传递 undefined 给这个参数,从而简单地模拟一个“丢失的”参数。 declare function f(x?...之后,我们编写了一个带有兼容签名的函数实现。函数有一个“实现签名”,但是这个签名不能被直接调用。即使函数的一个必需参数后面跟着两个可选参数,调用该函数的时候也不能只传入两个参数!...返回值类型为 void 的上下文类型并不会强迫函数不返回任何东西。

    2.6K20

    js正则表达式(一)

    最新标准已废弃 支持正则表达式的 String 对象的方法 search stringObject.search(regexp) 返回值:stringObject 中第一个与 regexp 相匹配的子串的起始位置...没有找到返回-1 不执行全局匹配,同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,总是返回第一个匹配的位置 match stringObject.match(...没有找到任何匹配,返回null。 在全局检索模式下,match()即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。...如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用, 每次匹配都会被调用。 变量名 代表值 match 匹配的子串(不是分组)。(对应于上述的$&。)...split stringObject.split(separator,howmany) 匹配到匹配项,函数未return,会返回undefined,即符合函数的返回值 lastIndex指向问题 使用带有

    3.8K40

    码如其人,小老弟,你能写一手漂亮的Python函数吗

    返回值 函数可以且应该被视为一个独立的小程序。它们以参数的形式获取一些输入,并返回一些输出值。当然,参数是可选的,但是从 Python 内部机制来看,返回值是不可选的。...即使你尝试创建一个不会返回值的函数,我们也不能选择不在内部采用返回值,因为 Python 的解释器会强制返回一个 None。...所以即使我们编写一个不包含 return 语句的函数,它仍然会返回某些东西。不过函数也应该要返回一些东西,因为它也是一个小程序。没有输出的程序又会有多少用,我们又如何测试它呢?...每次调用这个函数时,它都可能返回不同的值。如果它被调用两次,则用户可以第一次输入 3,第二次输入 7,使得对 add_three() 的调用分别返回 6 和 10。 为什么幂等很重要?...调用 print() 是副作用:除返回值以外,与程序或系统中其余部分的交互。 我们来扩展一下 add_three(number) 这个例子。

    48520

    码如其人,同学你能写一手漂亮的Python函数吗

    返回值 函数可以且应该被视为一个独立的小程序。它们以参数的形式获取一些输入,并返回一些输出值。当然,参数是可选的,但是从 Python 内部机制来看,返回值是不可选的。...即使你尝试创建一个不会返回值的函数,我们也不能选择不在内部采用返回值,因为 Python 的解释器会强制返回一个 None。...所以即使我们编写一个不包含 return 语句的函数,它仍然会返回某些东西。不过函数也应该要返回一些东西,因为它也是一个小程序。没有输出的程序又会有多少用,我们又如何测试它呢?...以下展示了非幂等的函数示例: 这函数不是幂等的,因为函数的返回值依赖于 I/O,即用户输入的数字。每次调用这个函数时,它都可能返回不同的值。...调用 print() 是副作用:除返回值以外,与程序或系统中其余部分的交互。 我们来扩展一下 add_three(number) 这个例子。

    58930

    码如其人,同学你能写一手漂亮的Python函数吗

    返回值 函数可以且应该被视为一个独立的小程序。它们以参数的形式获取一些输入,并返回一些输出值。当然,参数是可选的,但是从 Python 内部机制来看,返回值是不可选的。...即使你尝试创建一个不会返回值的函数,我们也不能选择不在内部采用返回值,因为 Python 的解释器会强制返回一个 None。...所以即使我们编写一个不包含 return 语句的函数,它仍然会返回某些东西。不过函数也应该要返回一些东西,因为它也是一个小程序。没有输出的程序又会有多少用,我们又如何测试它呢?...每次调用这个函数时,它都可能返回不同的值。如果它被调用两次,则用户可以第一次输入 3,第二次输入 7,使得对 add_three() 的调用分别返回 6 和 10。 为什么幂等很重要?...调用 print() 是副作用:除返回值以外,与程序或系统中其余部分的交互。 我们来扩展一下 add_three(number) 这个例子。

    49420

    码如其人,同学你能写一手漂亮的Python函数吗

    返回值 函数可以且应该被视为一个独立的小程序。它们以参数的形式获取一些输入,并返回一些输出值。当然,参数是可选的,但是从 Python 内部机制来看,返回值是不可选的。...即使你尝试创建一个不会返回值的函数,我们也不能选择不在内部采用返回值,因为 Python 的解释器会强制返回一个 None。...所以即使我们编写一个不包含 return 语句的函数,它仍然会返回某些东西。不过函数也应该要返回一些东西,因为它也是一个小程序。没有输出的程序又会有多少用,我们又如何测试它呢?...以下展示了非幂等的函数示例: 这函数不是幂等的,因为函数的返回值依赖于 I/O,即用户输入的数字。每次调用这个函数时,它都可能返回不同的值。...调用 print() 是副作用:除返回值以外,与程序或系统中其余部分的交互。 我们来扩展一下 add_three(number) 这个例子。

    46020

    Python 自动化指南(繁琐工作自动化)第二版:附录 C:练习题的答案

    函数由def语句及其def子句中的代码组成。函数调用是将程序执行转移到函数中,函数调用计算函数的返回值。 有一个全局作用域,每当调用一个函数时就会创建一个局部作用域。...当函数返回时,局部作用域被破坏,其中的所有变量都被遗忘。 返回值是函数调用计算得出的值。像任何值一样,返回值可以用作表达式的一部分。...如果正则表达式有组,则返回字符串元组的列表。 |字符表示两个组之间的“非此即彼”匹配。 ?字符可以表示“匹配零个或前面组中的一个”,也可以用来表示非贪婪匹配。 +匹配一个或多个。...PyInputPlus 是第三方模块,不附带 Python 标准库。 这可以使你的代码更短:你可以输入pyip.inputStr()而不是pyinputplus.inputStr()。...True总是使Run对象加粗,False总是不加粗,不管样式的加粗设置是什么。None将使Run对象只使用样式的加粗设置。 调用docx.Document()函数。

    99120

    R编程(四:函数详述、匿名函数、变量作用域)

    在定义函数时,没有缺省值的参数写在前面, 有缺省值的参数写在后面。不遵守这样的约定容易使得程序被误读, 有时会在运行时匹配错位。...函数的返回值 函数体中最后的表达式为函数返回值 > my_f = function(x){ x+1;x*3 } > my_f(3) [1] 9 如果需要指定,可以使用return(y)的方式在函数体的任何位置退出函数并返回..., 这会影响到参数表中缺省值与函数体中非局部变量的的查找。...部分匹配 在调用函数时, 如果以“形参名=实参值”的格式输入参数, 则“形参名”与定义时的形参名完全匹配时最优先采用;如果“形参名”是定义时的形参名的前一部分子串, 即部分匹配, 这时调用表中如果没有其它部分匹配..., 也可以输入到对应的完整形参名的参数中;按位置匹配是最后才进行的。

    2.4K20

    使用 Node.js 开发 CLI | moq

    功能如下: 实现执行下方语句,将用于笔记本的Hexo文章中公开文章复制到 用于博客的 Hexo 文章中: moq hexop './' '...../yiyungent.github.io' npm 初始化 项目 新建文件夹 moq mkdir moq 进入文件夹 cd moq npm 初始化项目 npm init 输入项目描述 完成 package.json...,比如 vue -h,vue -v [arguments]:参数,某些命令需要使用的值,比如 vue create myApp 选项与参数的区别:选项是命令内置实现,用户进行选择,参数一般是用户决定传入的值...选项一般会有全拼与简写形式(具体看使用的命令帮助),比如 --version = -v 全拼:以 -- 开头 / 简写:以 - 开头 选项也可以接受值,值写在选项之后,通过空格分隔 多个简写的选项可以连写...,开头使用一个 - 即可,需要注意的是,如果有接受值的选项需要放在最后,比如: vue create -d -r 的值> myApp vue create -dr 的值> myApp 执行

    58510
    领券