zoukankan      html  css  js  c++  java
  • 使用 Moq 测试.NET Core 应用 -- Mock 行为

    第一篇文章, 关于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.

  • 相关阅读:
    datalist分页
    css渐变色
    4月25日
    今天
    DataView Distinct
    心情复杂啦
    高数矩阵
    计算机视觉学习OpenCV Java 调用
    大数据学习关于hdfs
    摄影学习构图技巧
  • 原文地址:https://www.cnblogs.com/cgzl/p/9306728.html
Copyright © 2011-2022 走看看