使用前面讲过的方法基本上能够完成工作中的大部分任务了,然而有些功能实现起来还是比较麻烦的,比如说

字符串相等性比较不区分大小写,字符串是否匹配某一正则规则,集合中的每一个(某一个)元素是否符合特定规则等,Nunit提供了一些特定的方法用来实现一些用普通断言比较难以实现的扩展类型和方法.

下面介绍一下StringAssert类型下面的方法

StringAssert.AreEqualIgnoringCase(string expected,string actual)

此方法用于断言两个字符串在不区分大小写情况下是否相等,需要提供两个参数,第一个是期待的结果,第二个是实际结果.这个方法比较简单,不再提供示例.

需要注意的是Nunit里有许多需要提供两个参数的方法,一般情况下都是第一个是期待的结果,第二个是实际结果

StringAssert.Contains

用于断言一个字符串是否包含另一字符串,其中第一个参数为被包含的字符串,第二个为实际字符串,这个方法语义不是特别明确,需要注意

        [Test]        public void DemoTest()        {            StringAssert.Contains("hello", "hello,world");        }

这段代码片段会返回成功

StringAssert.StartsWith

用于断言字符串是否以某(几)字符开始

       [Test]        public void DemoTest()        {            StringAssert.StartsWith("h", "hello,world");        }

StringAssert.EndsWith

与StringAssert.StartsWith类似,string类也有此方法,相信大家都比较熟悉

StringAssert.IsMatch

用于断言指定字符串是否匹配某一正则规则

[warning]这个方法并没有大小写开关

下面介绍两个与文件(目录)有关的断言类FileAssert和DirectoryAssert.两个类下面的断言方法基本一样,只是一个是断言文件,一个是断言目录.下面以FileAssert为例说明

FileAssert.AreEqual

这个方法用于断言两个文件是否是同一个文件,接受字符串参数

需要说明的是,字符串路径必须指向文件,而不能是目录或者不存在的文件.

FileAssert.Exists

用于断言某个文件是否存在,接受字符串参数或者FileInfo作为参数

DirectoryAssert方法类似,并且这些方法都对应的有相反方向的断言,方法名包含Not,很容易理解

单元测试过程中,我们很多时候都要处理集合,Nunit里提供了一个 CollectionAssert 类用于处理对集合类型的断言

下面介绍一下这个类下面的断言方法

CollectionAssert.AllItemsAreInstancesOfType

用于断言集合里面的元素是否都是某一特定类型.

        [Test]        public void DemoTest()        {            ArrayList ar = new ArrayList {"a", "b", "c"};            CollectionAssert.AllItemsAreInstancesOfType(ar, typeof(string));        }

以上断言会返回成功,因为我们向ArrayList里添加的全是string类型的元素

需要注意,很多断言方法第一个参数是期待类型,第二个是实际类型,而此方法则相反,第一个是实际集合,第二个是期待的类型

这里的类型支持父类,比如说如果是typeof(object)也同样能通过,语义上来讲,元素是string类型,也是object类型,讲得通的

CollectionAssert.AllItemsAreNotNull

用于断言集合里的元素全部不是Null,也即集合不包含null元素,这个方法只有一个参数,传入我们要判断的集合即可

CollectionAssert.AllItemsAreUnique

用于断言集合里面的元素全部是惟一的,即集合里没有重复元素.

[warning]需要注意的是,这个方法并没有提供一个重载支持自定义比较器,它只能用于断言简单类型,如string,int,datetime等是否惟一,如果是类类型则需要重载equalsgethashcode但是通常我们并不这样做,而是在类外部提供一个比较器,如果判断复杂类型是否惟一,我们在以后再介绍

下面举一个例子说明这个问题

      [Test]        public void DemoTest()        {            Person[] psn = new Person[] {                new Person { Name="sto",Age=32,BirthDay=DateTime.Today.AddYears(-10)},                new Person { Name="sto",Age=32,BirthDay=DateTime.Today.AddYears(-10)}};            CollectionAssert.AllItemsAreUnique(psn);        }

以上代码测试会通过,因为两个new出来的Persn不是同一个对象,但实际业务中,两个对象的属性完全相等时我们就认为它们是相等的,以上我们期待的结果是 不通过

CollectionAssert.AreEqual

用于断言两个集合是否相等,如果两个集合里的元素都是简单对象,如果是复杂对象用这个方法并不是很方便(虽然此方法提供提供IComparer作为参数,然而IComparer对集合并不是很方便)

[warning]这里的两个集合相等第一集合元素个数必须相等(不用多说),第二集合元素的顺序必须一致的

还有一点需要说明还有一点需要说明,如以上所说,两个集合元素顺序一致,并且在运行时类型是一致的就会被认为是相等,这两个集合的类型不必一样,比如说一个是array,一个是list,泛型参数也不必须一样

只要在运行时类型是一致的即可

请看下面一段代码

        [Test]        public void DemoTest()        {            int[] a = {3, 4, 5};            List<object> b =new List<object> {3, 4, 5};            CollectionAssert.AreEqual(a, b);        }

a和b两个集合的集合类型不一样,泛型类型也不一样,但是运行的时候却是一样的,因此以上代码执行会返回成功状态

CollectionAssert.AreEquivalent

这个方法用来判断两个集合的元素是否等价,如果两个集合元素类型相同,个数也相同,即视为等价,与上面的方法相比,它不关心顺序

        [Test]        public void DemoTest()        {            int[] a = {3, 4, 5};            List<object> b =new List<object> {4,3, 5};            CollectionAssert.AreEquivalent(a, b);        }

以上代码测试是通过的

CollectionAssert.Contains

用于断言集合是否包含某一元素

需要说明的是.要判断集合中是否包含某一元素,只要集合运行时有特定元素和指定元素类型相同,并且值相同,即认为集合包含这一元素

请看以下代码片段

        [Test]        public void DemoTest()        {            int[] a = {3, 4, 5};            object element = 4;            List<object> b =new List<object> {element,3, 5};            CollectionAssert.Contains(b, 4);        }

以上代码段中b集合虽然不包含值为4的int类型元素,只有object类型的值为4的元素,然而它在运行时真正的类型是int,因此以上测试也是通过的.

CollectionAssert.IsEmpty

用于断言某一集合是空集合,即元素个数为0

CollectionAssert.IsOrdered

用于断言集合元素是否按正序排列,所谓正序列,是指按阿拉伯数字或者字符表顺序正序排列.

CollectionAssert.IsSubsetOf

用于判断一个集合是否为另一个集合的子集,与以上相同的是,这两个集合不必是同一类集合(可以一个是array,一个是list),只要一个集合的元素完全包含在另一个集合中,即认为它是另一个集合的子集

只要一个集合元素完全包含在另一个集合中即可,顺序不必相同

CollectionAssert.IsSupersetOf

用于断言一个集合是否是另一个集合的父集,与子集判断用法一样.

以上大部分方法都有一个判断相反的方法,名称中多一个Not,这里不再罗列

.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言相关推荐

  1. .netcore持续集成测试篇之MVC层单元测试

    前面我们讲的很多单元测试的的方法和技巧不论是在.net core和.net framework里面都是通用的,但是mvc项目里有一种比较特殊的类是Controller,首先Controller类的返回 ...

  2. 玩转Docker实战篇!使用Docker与Jenkins进行持续集成测试,附加介绍Docker-in-Docker

    一.本文目的 在前面的文章中,所有的测试例子都是本地的.围绕着单个开发者的(就是说,如何让本地开发者使用Docker来测试本地网站或者引用程序).现在来看看在多开发者的持续集成测试场景中如何使用Doc ...

  3. git连接jenkins_基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

    作者 | 刘春明 责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用率 ...

  4. 基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

    作者 | 刘春明,责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图 | CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用 ...

  5. 你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!...

    作者 | 刘春明 责编 | Carol 出品 | CSDN 云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 目前公司为了降低机器使用成本,对所有的AWS虚拟机进行了盘点,发现利用率 ...

  6. 持续集成测试-Jenkins

    可能会出现的一些问题: 1.bug总是最后才发现: 2.越到项目后期,bug解决的难度越大: 3.交付时间无法保障,有延期风险: 持续集成测试的目的:及时发现bug,提高效率 优点:1统一代码库:2自 ...

  7. Jenkins 使用slave管理进行持续集成测试说明

    概述&目的 由于中心项目过多,但所有项目特点是持续时间长,变更少,所以易于做CI(持续集成)的build和test,持续检查每个项目软件的健康状况.但前期做持续集成遇到一些问题,在持续集成软件 ...

  8. [网络安全学习篇60]:文件上传

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  9. CentOS 7 安装篇之ISO文件选择

    CentOS 7 安装篇之ISO文件选择 YogurtW 2018-04-25 23:22:27  6023  已收藏 7 展开 背景:安装CentOS首先要做的工作就是准备镜像,本文旨在介绍Cent ...

最新文章

  1. c语言之贪吃蛇源码,C语言之贪吃蛇经典源码
  2. cornerHarris函数
  3. php 自动测试,PHP自动化测试
  4. Window平台 mysql8.0下载安装方式
  5. c# select标签绑定枚举,并以Description做Text显示
  6. Qt模型、视图解读之视图
  7. CentOS安装glibc-2.14
  8. 怎么把OCX打包成cab文件
  9. IDEA安装“Alibaba Java Coding Guidelines”插件
  10. jsp servlet mysql 乱码_关于jsp和servlet中的乱码问题
  11. bootstrap栅格系统中同行div高度不一致的解决方法
  12. masm5安装教程_汇编学习笔记(5)-程序的编译(MASM)
  13. SVN - commit报错“xxx remains in tree-confilict”
  14. linux 命令英文全称
  15. 雷军《小米创业思考》读书笔记
  16. IOS端K线系列之K线-绘制蜡烛图
  17. Linux 配置Git
  18. 微信PC版重大更新!电脑上也能玩小游戏了
  19. virtualbox设置文件夹共享(win7主机)
  20. 论如何使用三相220V变频器驱动额定电压为380V Y接法的三相异步电机

热门文章

  1. iOS 玩转CocoaPods
  2. Kuzzle,一种内部部署的文档后端
  3. 4项技巧使你不再为PHP中文编码苦恼
  4. Linux配置sudo
  5. VC++的dll中接收消息
  6. 从Banner入手保护linux系统服务器
  7. ASP.NET中常用输出JS脚本的类(改进版)
  8. 性能再提升70%?大咖前瞻带你揭开.NET6的神秘面纱!
  9. 使用C#在VS Code中编写Notebook
  10. 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)