使用 Moq 测试.NET Core 应用 -- Mock 行为

 

第一篇文章, 关于Mock的概念介绍: http://www.javashuo.com/article/p-rjikmmye-ha.htmlhtml

第二篇文章, 关于方法Mock的介绍: http://www.javashuo.com/article/p-bbgioyks-mg.htmlgit

第三篇文章, 关于属性Mock的介绍: http://www.javashuo.com/article/p-vrvqgofk-mh.htmlgithub

本文介绍使用Moq进行行为测试.测试

使用的代码: https://github.com/solenovex/Moq4-Tutorial-Code 里面的 04 Before 部分.spa

 

Mock 行为

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

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

 

确认方法被调用

建立一个新的测试方法:blog

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

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

 

若是我改变一下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.

相关文章
相关标签/搜索