第一篇文章, 关于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-Tutorial-Code 里面的 04 Before 部分.

Mock 行为

前两篇介绍的内容都是基于状态的测试, 也就是代码执行后, 我们坚持被测试系统的状态是否和我们期待的一致.

而本文介绍的是行为测试, 也就是说我们要确认某些方法会被执行或者某些属性被访问了.

确认方法被调用

创建一个新的测试方法:

与状态测试不同, 这里我不使用Assert, 我是用的是mock.Verify() 来判定其参数里的方法会被执行. 在这里也可以使用It类进行参数匹配.

该测试会通过, 表示IsHealthy确实被执行了:

如果我改变一下Verify里IsHealthy()方法的参数范围:

那么针对此例, 测试就会失败:

这是因为IsHealthy()方法被调用时的参数与我所期待的参数不一致.

自定义错误信息

这时, 我们可以使用另一个重载版本的Verify()方法, 它可以添加一个错误信息的参数:

这时测试失败的信息如下:

此外通过重载方法, 还可以判断方法被调用的次数

方法被调用次数

还是用到了Verify的重载方法和Times这个struct.

1. 没被调用:

2. 被调用1次:

3. 被调用特定次数:

Times这个struct里面还有很多选项, 请自行摸索.

确认属性访问

首先是Get.

与之前调用的Verify()不同, 针对属性, 需要使用VerifyGet()方法来确保属性被访问了:

这个测试会通过, 因为这个属性确实被访问了:

检查另一个没有被访问的属性:

那么结果就会失败:

下面是Set.

很简单, 使用VerifySet()方法即可. 再创建一个测试方法:

在VerifySet方法里需要设定被Set的属性以及被Set的值.

针对此例, 这个测试会通过:

但是如果Set的值不正确, 测试就会失败:

本文先到这....未完待续....

代码: https://github.com/solenovex/Moq4-Tutorial-Code 04 After.

使用 Moq 测试.NET Core 应用 -- Mock 行为的更多相关文章

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

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 本文介绍使用Moq来Mock方法. 使用的代码: https://git ...

  2. 使用 Moq 测试.NET Core 应用 -- Mock 属性

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

  3. 使用 Moq 测试.NET Core 应用

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

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

    什么是Mock 当对代码进行测试的时候, 我们经常需要用到一些模拟(mock)技术. 绿色的是需要被测试的类, 黄色是它的依赖项, 灰色的无关的类 在一个项目里, 我们经常需要把某一部分程序独立出来以 ...

  5. 使用 Moq 测试.NET Core 应用 -- 其它

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

  6. Moq 测试 属性,常用方法

    RhinoMock入门(7)——Do,With和Record-playback 摘要: (一)Do(delegate)有时候在测试过程中只返回一个静态的值是不够的,在这种情况下,Do()方法可以用来在 ...

  7. Moq 在.net Core 单元测试中的使用

    Moq,主要用来伪造接口的实现类,实现方法,属性 moq The most popular and friendly mocking framework for .NET What? Moq (pro ...

  8. angularJS测试一 Karma Jasmine Mock

    AngularJS测试 一 测试工具 1.NodeJS领域:Jasmine做单元测试,Karma自动化完成单元测试,Grunt启动Karma统一项目管理,Yeoman最后封装成一个项目原型模板,npm ...

  9. Spring MVC如何测试Controller(使用springmvc mock测试)

    在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码. 1.什么是mock测试? mock测试就是在测试过 ...

随机推荐

  1. 如何编写高质量JavaScript代码

    书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且随着时间的推移,这些bug的成本也会增加,尤其当这些bug潜伏并慢慢出现在已经发布的软件中时.当 ...

  2. 图片和base64相互转化

    # -*- coding: utf-8 -*- import urllib2 as ulb import base64 #用urllib2库链接网络图像 response=ulb.Request('h ...

  3. 如何在当前目录下快速打开cmd(或者以管理员的身份打开)

    1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: D:\foo\bar", 然后输入cd 再把 ...

  4. statsd.go

        }     return arr[indexOfPerc] }

  5. bzoj 3195 奇怪的道路 状压dp

    看范围,状压没毛病 但是如果随便连的话给开1<<16,乘上n,m就爆了 所以规定转移时只向回连边 于是想状态数组:f[i][j]表示到i这里i前K位的状态为j(表示奇偶) 发现有条数限制, ...

  6. Postman-----将 A 请求中 response Body 中的参数值传入到下一个请求 B 的 request body 中作为参数发送请求

    问题:将A接口中response body的"id"传入到B接口的request body中. 解决办法: 1.在A接口的test中设置环境变量. 代码:var data = JS ...

  7. SpringBoot---页面跳转之WebMvcConfigurerAdapter

    摘要:在springboot中定义自己的方法继承WebMvcConfigurerAdapter方法可以实现扩展springMvc功能,要全面实现接管springmvc就要在自己的方法上加上@Enabl ...

  8. 在后台主机中托管SignalR服务并广播心跳包

    什么是后台主机 在之前的 Asp.NETCore 轻松学系列中,曾经介绍过一个轻量级服务主机 IHostedService ,利用 IHostedService 可以轻松的实现一个系统级别的后台服务, ...

  9. 软硬件协同编程 - C#玩转CPU高速缓存(附示例)

    写在前面 好久没有写博客了,一直在不断地探索响应式DDD,又get到了很多新知识,解惑了很多老问题,最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture, ...

  10. 网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议

        前面我们认识了两个常用文本类的 RPC 协议,对于陌生人之间的沟通,用 NBA.CBA 这样的缩略语,会使得协议约定非常不方便.     在讲 CDN 和 DNS 的时候,我们讲过接入层的设计 ...