GitHub地址:https://github.com/shouldly/shouldly

Shouldly的官方文档:http://docs.shouldly-lib.net/

Nuget安装:

在测试类中引用:

using Shouldly;

用法 :

  1. //验证
  2. UsingDbContext(context =>
  3. {
  4. var bill = context.Bills.FirstOrDefault();
  5. bill.ShouldNotBeNull();
  6. });

我们看一下,ShouldNotBeNull是如何定义的, 其实就是在在原类型的基础上加的扩展方法。

  1. namespace Shouldly
  2. {
  3. [DebuggerStepThrough]
  4. [ShouldlyMethods]
  5. public static class ShouldBeNullExtensions
  6. {
  7. public static void ShouldBeNull<T>(this T actual);
  8. public static void ShouldBeNull<T>(this T actual, string customMessage);
  9. public static void ShouldBeNull<T>(this T actual, [InstantHandle] Func<string> customMessage);
  10. [ContractAnnotation("actual:null => halt")]
  11. public static void ShouldNotBeNull<T>(this T actual);
  12. [ContractAnnotation("actual:null => halt")]
  13. public static void ShouldNotBeNull<T>(this T actual, string customMessage);
  14. [ContractAnnotation("actual:null => halt")]
  15. public static void ShouldNotBeNull<T>(this T actual, [InstantHandle] Func<string> customMessage);
  16. }
  17. }
  1. [DebuggerStepThrough]
  2. [ShouldlyMethods]
  3. public static class ShouldBeTestExtensions
  4. {
  5. public static void ShouldBe(this decimal actual, decimal expected, decimal tolerance, [InstantHandle] Func<string> customMessage);
  6. public static void ShouldBe(this DateTime actual, DateTime expected, TimeSpan tolerance);
  7. public static void ShouldBe(this DateTime actual, DateTime expected, TimeSpan tolerance, string customMessage);
  8. public static void ShouldBe(this DateTime actual, DateTime expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  9. public static void ShouldBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance);
  10. public static void ShouldBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance, string customMessage);
  11. public static void ShouldBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  12. public static void ShouldBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance);
  13. public static void ShouldBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance, string customMessage);
  14. public static void ShouldBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  15. public static void ShouldBe<T>(this T actual, T expected);
  16. public static void ShouldBe<T>(this T actual, T expected, string customMessage);
  17. public static void ShouldBe<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage);
  18. public static void ShouldBe<T>(this IEnumerable<T> actual, IEnumerable<T> expected, bool ignoreOrder = false);
  19. public static void ShouldBe(this decimal actual, decimal expected, decimal tolerance, string customMessage);
  20. public static void ShouldBe<T>(this IEnumerable<T> actual, IEnumerable<T> expected, bool ignoreOrder, [InstantHandle] Func<string> customMessage);
  21. public static void ShouldBe<T>(this IEnumerable<T> actual, IEnumerable<T> expected, bool ignoreOrder, string customMessage);
  22. public static void ShouldBe(this IEnumerable<decimal> actual, IEnumerable<decimal> expected, decimal tolerance, string customMessage);
  23. public static void ShouldBe(this decimal actual, decimal expected, decimal tolerance);
  24. public static void ShouldBe(this double actual, double expected, double tolerance, [InstantHandle] Func<string> customMessage);
  25. public static void ShouldBe(this double actual, double expected, double tolerance, string customMessage);
  26. public static void ShouldBe(this double actual, double expected, double tolerance);
  27. public static void ShouldBe(this IEnumerable<decimal> actual, IEnumerable<decimal> expected, decimal tolerance);
  28. public static void ShouldBe(this IEnumerable<float> actual, IEnumerable<float> expected, double tolerance, string customMessage);
  29. public static void ShouldBe(this IEnumerable<float> actual, IEnumerable<float> expected, double tolerance);
  30. public static void ShouldBe(this IEnumerable<float> actual, IEnumerable<float> expected, double tolerance, [InstantHandle] Func<string> customMessage);
  31. public static void ShouldBe(this IEnumerable<double> actual, IEnumerable<double> expected, double tolerance, string customMessage);
  32. public static void ShouldBe(this IEnumerable<double> actual, IEnumerable<double> expected, double tolerance);
  33. public static void ShouldBe(this float actual, float expected, double tolerance, [InstantHandle] Func<string> customMessage);
  34. public static void ShouldBe(this float actual, float expected, double tolerance, string customMessage);
  35. public static void ShouldBe(this float actual, float expected, double tolerance);
  36. public static void ShouldBe(this IEnumerable<decimal> actual, IEnumerable<decimal> expected, decimal tolerance, [InstantHandle] Func<string> customMessage);
  37. public static void ShouldBe(this IEnumerable<double> actual, IEnumerable<double> expected, double tolerance, [InstantHandle] Func<string> customMessage);
  38. public static void ShouldBeAssignableTo(this object actual, Type expected, [InstantHandle] Func<string> customMessage);
  39. public static void ShouldBeAssignableTo(this object actual, Type expected, string customMessage);
  40. public static void ShouldBeAssignableTo(this object actual, Type expected);
  41. public static T ShouldBeAssignableTo<T>(this object actual, [InstantHandle] Func<string> customMessage);
  42. public static T ShouldBeAssignableTo<T>(this object actual);
  43. public static T ShouldBeAssignableTo<T>(this object actual, string customMessage);
  44. public static void ShouldBeGreaterThan<T>(this T actual, T expected) where T : IComparable<T>;
  45. public static void ShouldBeGreaterThan<T>(this T actual, T expected, IComparer<T> comparer);
  46. public static void ShouldBeGreaterThan<T>(this T actual, T expected, IComparer<T> comparer, string customMessage);
  47. public static void ShouldBeGreaterThan<T>(this T actual, T expected, IComparer<T> comparer, Func<string> customMessage);
  48. public static void ShouldBeGreaterThan<T>(this T actual, T expected, string customMessage) where T : IComparable<T>;
  49. public static void ShouldBeGreaterThan<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  50. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  51. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer, string customMessage);
  52. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer);
  53. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected, string customMessage) where T : IComparable<T>;
  54. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected) where T : IComparable<T>;
  55. public static void ShouldBeGreaterThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer, Func<string> customMessage);
  56. public static void ShouldBeInRange<T>(this T actual, T from, T to, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  57. public static void ShouldBeInRange<T>(this T actual, T from, T to, string customMessage) where T : IComparable<T>;
  58. public static void ShouldBeInRange<T>(this T actual, T from, T to) where T : IComparable<T>;
  59. public static void ShouldBeLessThan<T>(this T actual, T expected, IComparer<T> comparer, Func<string> customMessage);
  60. public static void ShouldBeLessThan<T>(this T actual, T expected, IComparer<T> comparer, string customMessage);
  61. public static void ShouldBeLessThan<T>(this T actual, T expected, IComparer<T> comparer);
  62. public static void ShouldBeLessThan<T>(this T actual, T expected, string customMessage) where T : IComparable<T>;
  63. public static void ShouldBeLessThan<T>(this T actual, T expected) where T : IComparable<T>;
  64. public static void ShouldBeLessThan<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  65. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  66. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer, Func<string> customMessage);
  67. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer);
  68. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected, string customMessage) where T : IComparable<T>;
  69. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected) where T : IComparable<T>;
  70. public static void ShouldBeLessThanOrEqualTo<T>(this T actual, T expected, IComparer<T> comparer, string customMessage);
  71. public static void ShouldBeNegative(this decimal actual);
  72. public static void ShouldBeNegative(this decimal actual, string customMessage);
  73. public static void ShouldBeNegative(this decimal actual, [InstantHandle] Func<string> customMessage);
  74. public static void ShouldBeNegative(this double actual, string customMessage);
  75. public static void ShouldBeNegative(this double actual);
  76. public static void ShouldBeNegative(this double actual, [InstantHandle] Func<string> customMessage);
  77. public static void ShouldBeNegative(this float actual);
  78. public static void ShouldBeNegative(this long actual, string customMessage);
  79. public static void ShouldBeNegative(this short actual, string customMessage);
  80. public static void ShouldBeNegative(this short actual);
  81. public static void ShouldBeNegative(this long actual, [InstantHandle] Func<string> customMessage);
  82. public static void ShouldBeNegative(this long actual);
  83. public static void ShouldBeNegative(this int actual, [InstantHandle] Func<string> customMessage);
  84. public static void ShouldBeNegative(this int actual, string customMessage);
  85. public static void ShouldBeNegative(this int actual);
  86. public static void ShouldBeNegative(this short actual, [InstantHandle] Func<string> customMessage);
  87. public static void ShouldBeNegative(this float actual, [InstantHandle] Func<string> customMessage);
  88. public static void ShouldBeNegative(this float actual, string customMessage);
  89. public static T ShouldBeOfType<T>(this object actual);
  90. public static T ShouldBeOfType<T>(this object actual, string customMessage);
  91. public static void ShouldBeOfType(this object actual, Type expected, string customMessage);
  92. public static void ShouldBeOfType(this object actual, Type expected, [InstantHandle] Func<string> customMessage);
  93. public static T ShouldBeOfType<T>(this object actual, [InstantHandle] Func<string> customMessage);
  94. public static void ShouldBeOfType(this object actual, Type expected);
  95. public static void ShouldBeOneOf<T>(this T actual, T[] expected, string customMessage);
  96. public static void ShouldBeOneOf<T>(this T actual, params T[] expected);
  97. public static void ShouldBeOneOf<T>(this T actual, T[] expected, [InstantHandle] Func<string> customMessage);
  98. public static void ShouldBePositive(this float actual, string customMessage);
  99. public static void ShouldBePositive(this decimal actual, [InstantHandle] Func<string> customMessage);
  100. public static void ShouldBePositive(this short actual, [InstantHandle] Func<string> customMessage);
  101. public static void ShouldBePositive(this short actual, string customMessage);
  102. public static void ShouldBePositive(this short actual);
  103. public static void ShouldBePositive(this decimal actual);
  104. public static void ShouldBePositive(this decimal actual, string customMessage);
  105. public static void ShouldBePositive(this float actual);
  106. public static void ShouldBePositive(this double actual);
  107. public static void ShouldBePositive(this double actual, string customMessage);
  108. public static void ShouldBePositive(this double actual, [InstantHandle] Func<string> customMessage);
  109. public static void ShouldBePositive(this float actual, [InstantHandle] Func<string> customMessage);
  110. public static void ShouldBePositive(this long actual, [InstantHandle] Func<string> customMessage);
  111. public static void ShouldBePositive(this long actual, string customMessage);
  112. public static void ShouldBePositive(this long actual);
  113. public static void ShouldBePositive(this int actual, [InstantHandle] Func<string> customMessage);
  114. public static void ShouldBePositive(this int actual, string customMessage);
  115. public static void ShouldBePositive(this int actual);
  116. public static void ShouldBeSameAs(this object actual, object expected, string customMessage);
  117. public static void ShouldBeSameAs(this object actual, object expected, [InstantHandle] Func<string> customMessage);
  118. public static void ShouldBeSameAs(this object actual, object expected);
  119. [ContractAnnotation("actual:null,expected:null => halt")]
  120. public static void ShouldNotBe<T>(this T actual, T expected, [InstantHandle] Func<string> customMessage);
  121. [ContractAnnotation("actual:null,expected:null => halt")]
  122. public static void ShouldNotBe<T>(this T actual, T expected, string customMessage);
  123. [ContractAnnotation("actual:null,expected:null => halt")]
  124. public static void ShouldNotBe<T>(this T actual, T expected);
  125. public static void ShouldNotBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance, string customMessage);
  126. public static void ShouldNotBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance, string customMessage);
  127. public static void ShouldNotBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance);
  128. public static void ShouldNotBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  129. public static void ShouldNotBe(this DateTimeOffset actual, DateTimeOffset expected, TimeSpan tolerance);
  130. public static void ShouldNotBe(this DateTime actual, DateTime expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  131. public static void ShouldNotBe(this DateTime actual, DateTime expected, TimeSpan tolerance, string customMessage);
  132. public static void ShouldNotBe(this DateTime actual, DateTime expected, TimeSpan tolerance);
  133. public static void ShouldNotBe(this TimeSpan actual, TimeSpan expected, TimeSpan tolerance, [InstantHandle] Func<string> customMessage);
  134. public static void ShouldNotBeAssignableTo(this object actual, Type expected);
  135. public static void ShouldNotBeAssignableTo<T>(this object actual, [InstantHandle] Func<string> customMessage);
  136. public static void ShouldNotBeAssignableTo<T>(this object actual, string customMessage);
  137. public static void ShouldNotBeAssignableTo(this object actual, Type expected, [InstantHandle] Func<string> customMessage);
  138. public static void ShouldNotBeAssignableTo(this object actual, Type expected, string customMessage);
  139. public static void ShouldNotBeAssignableTo<T>(this object actual);
  140. public static void ShouldNotBeInRange<T>(this T actual, T from, T to) where T : IComparable<T>;
  141. public static void ShouldNotBeInRange<T>(this T actual, T from, T to, [InstantHandle] Func<string> customMessage) where T : IComparable<T>;
  142. public static void ShouldNotBeInRange<T>(this T actual, T from, T to, string customMessage) where T : IComparable<T>;
  143. public static void ShouldNotBeOfType(this object actual, Type expected, string customMessage);
  144. public static void ShouldNotBeOfType<T>(this object actual, string customMessage);
  145. public static void ShouldNotBeOfType(this object actual, Type expected);
  146. public static void ShouldNotBeOfType(this object actual, Type expected, [InstantHandle] Func<string> customMessage);
  147. public static void ShouldNotBeOfType<T>(this object actual);
  148. public static void ShouldNotBeOfType<T>(this object actual, [InstantHandle] Func<string> customMessage);
  149. public static void ShouldNotBeOneOf<T>(this T actual, T[] expected, [InstantHandle] Func<string> customMessage);
  150. public static void ShouldNotBeOneOf<T>(this T actual, T[] expected, string customMessage);
  151. public static void ShouldNotBeOneOf<T>(this T actual, params T[] expected);
  152. public static void ShouldNotBeSameAs(this object actual, object expected, [InstantHandle] Func<string> customMessage);
  153. public static void ShouldNotBeSameAs(this object actual, object expected, string customMessage);
  154. public static void ShouldNotBeSameAs(this object actual, object expected);
  155. }

当测试失败时,

异常测试:

  1. var bill = context.Bills.FirstOrDefault();
  2. Should.Throw<DivideByZeroException>(() =>
  3. {
  4. bill.SetBmiNoPay();
  5. });

测试结果:

一款简单易用的.Net 断言测试框架 : Shouldly的更多相关文章

  1. 推荐一款简单易用线上引流测试工具:GoReplay

    一. 引流测试产生背景 日常大部分的测试工作都是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致, ...

  2. 简单易用的leetcode开发测试工具(npm)

    描述 最近在用es6解leetcode,当问题比较复杂时,有可能修正了新的错误,却影响了前面的流程.要用通用的测试工具,却又有杀鸡用牛刀的感觉,所以就写了个简单易用的leetcode开发测试工具,分享 ...

  3. 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)

    EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...

  4. Criterion - 一个简单可扩展的 C 语言测试框架

    A dead-simple, yet extensible, C test framework. Philosophy Most test frameworks for C require a lot ...

  5. 如何以最简单的方式安装 KALI 渗透测试框架系统

    0x01 第一步下载 KALI 百度搜索 KALI 官网,找到下载区,我选的是 64 位标准版,但是推荐下载 32 位(功能貌似更全) 这个为下载后的 iso 镜像文件 0x02 第二步打开虚拟机,配 ...

  6. 简单易用的堡垒机系统—Teleport

    简单易用的堡垒机系统-Teleport 官方文档:http://teleport.eomsoft.net/doc#!1  一.Teleport介绍 Teleport是触维软件推出的一款简单易用的堡垒机 ...

  7. 消灭Bug!十款免费移动应用测试框架推荐

      对于移动应用开发者而言,Bug往往是最让人头疼的一大问题.不同于时时刻刻可以修补的Web App,移动App中的Bug往往隐藏得很深,甚至有时候等到用户使用才显现出来,这么一来开发者搞不好就会赔了 ...

  8. hapi lab测试框架简单使用

    1. 依赖安装 yarn init yarn add lab code 2. 基本模式 const Lab = require('lab'); const Code = require('code') ...

  9. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

随机推荐

  1. 并发编程&数据库 - 考核题

    第八章主要内容 第八章:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号.事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模型. ...

  2. 安装串口设备驱动时遇到 Windows 无法验证此设备所需的驱动程序的数字签名。最近的硬件或软件更改安装的文件可能未正确签名或已损坏,或者可能是来自未知来源的恶意软件. 问题该如何处理?

    win7 系统直接在 cmd 命令行中输入以下语句,重启电脑后重新安装驱动即可. BCDEDIT -SET LOADOPTIONS DISABLE_INTEGRITY_CHECKS BCDEDIT - ...

  3. 内核通信之Netlink源码分析-用户内核通信原理2

    2017-07-05 上文以一个简单的案例描述了通过Netlink进行用户.内核通信的流程,本节针对流程中的各个要点进行深入分析 sock的创建 sock管理结构 sendmsg源码分析  sock的 ...

  4. mysql表的完整性约束

    概览 为了防止不符合规范的数据进入数据库,在用户对数据进行插入.修改.删除等操作时,DBMS自动按照一定的约束条件对数据进行监测, 使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确.有效 ...

  5. Java队列存储结构及实现

    一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队 ...

  6. Spark --【宽依赖和窄依赖】

    前言 Spark中RDD的高效与DAG图有着莫大的关系,在DAG调度中需要对计算过程划分stage,暴力的理解就是stage的划分是按照有没有涉及到shuffle来划分的,没涉及的shuffle的都划 ...

  7. ImageNet历年冠军和相关CNN模型

    ImageNet 是一个超过15 million的图像数据集,大约有22,000类. 是由李飞飞团队从2007年开始,耗费大量人力,通过各种方式(网络抓取,人工标注,亚马逊众包平台)收集制作而成,它作 ...

  8. Java中什么时候使用extends,什么时候使用implements?

    1.Extends 是实现单继承一个类的关键字,通过使用extends来显示的指明当前类继承的父类,只要那个类不是声明final或者那个类定义为abstract的就能继承.基本声明格式是 [修饰符] ...

  9. Thinkphp5.0实战开发二------自动生成目录结构

    序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...

  10. mysql命令行创建数据库

    create database publiccms; grant all privileges on publiccms.* to root@localhost identified by 'publ ...