Xunit常用断言整理&带一点Shouldly介绍

Posted rulasann

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xunit常用断言整理&带一点Shouldly介绍相关的知识,希望对你有一定的参考价值。

每次学新东西的时候总要先祭出官方文档的:https://xunit.github.io/

搞.net core对Xunit应该不会陌生,毕竟也没几个可以选的,刚开始用,自己整理点东西怕忘了,大神就不用看了。

【安装】

Nuget中搜索xunit,选xUnit.netxunit.runner.visualstudio包。

 

【Tips】

1.两种测试类型:[Fact][Theory]

2.其中[Theory]有三种传参类型:InlineDataClassDataPropertyData

3.它们还有另外两个参数:

[Fact(DisplayName ="通过测试")]

[Fact(Skip ="跳过测试")] 

4.测试类必须是public

 

 

【常用断言】

1:Assert.Equal /Assert.NotEqual   判断是否相等

方法:

技术分享图片

测试:

技术分享图片

 

2:Assert.Throws   判定异常

可以直接判定会出现的异常,如:

技术分享图片

这里将字符串转换成int类型,当然如果传进去的参数不能转换就会抛出<FormatException>的异常:

技术分享图片

 

异常也可以写在方法里:

技术分享图片

测试:

技术分享图片

这里如果不在方法里判定异常的话,断言的时候是没有异常可抛的,因为这个方法本身是没有问题的,但是在实际项目中,我们定义的参数总会有限制,所以需要自己判定异常。

 

3:Assert.True /Assert.False   这个一看就是布尔函数专用

 技术分享图片

测试:

技术分享图片

 

 4:Assert.Null/Assert.NotNull

      Assert.Empty/Assert.NotEmpty

这两个都可以判定结果集是否为空。一般查询数据库返回结果时会用到。

关于NullEmpty的区别我们举两个例子:

技术分享图片

技术分享图片

 

我的理解就是Null是空,连空值都没有的那种空;

Empty是值为空,空字符串也是字符串所以不能用Null,而类变量不赋值默认为空。

在数据库里的区别大概就是这样子的:

技术分享图片

应用场景:

前台根据具体信息(常常是主键)直接获取数据,如果数据不存在,一般都是返回Null

如果是根据筛选条件返回多条数据,并将数据填入既定的表单中,即使没有符合条件的数据,一般也都是返回Empty

 

 

Xunit常用断言我感觉就这七个,其他的我没用过,基本上都是望名生义的,要是日后遇到什么特殊的我再补充。

 

 

should

简介:Shouldly是一个轻量的断言框架,用于补充.NET框架下的测试工具。Shouldly将焦点放在当断言失败时如何简单精准的给出很好的错误信息。

 

使用:Nuget引用Shouldly

 

Xunit已经很好用了,为什么还要用Shouldly呢?

如果有一个方法是这样的,那要怎样测试?

技术分享图片

既然有Assert.Throws是不是也有NotThrow什么的?

果然,网上搜了一圈发现以前是有的,Assert.DoesNotThrow,但是好像2.0版本之后就没有了。

所以我借助了Shouldly,它比Xunit更小巧,错误信息更全面,作为补充我觉得很搭。

技术分享图片

 

 

【断言总集】

Assert:

Assert.All

Assert.Collection

Assert.Contains

Assert.DoesNotContain

Assert.DoesNotMatch

Assert.Empty

Assert.EndsWith

Assert.Equal

Assert.False

Assert.InRange

Assert.IsAssignableFrom

Assert.IsNotType

Assert.IsType

Assert.Matches

Assert.NotEmpty

Assert.NotEqual

Assert.NotInRange

Assert.NotNull

Assert.NotSame

Assert.NotStrictEqual

Assert.Null

Assert.ProperSubset

Assert.PropertyChanged

Assert.Raises

Assert.RaisesAny

Assert.RaiseAnyAsync

Assert.RaiseAsync

Assert.ReferenceEquals

Assert.Same

Assert.Single

Assert.StartsWith

Assert.StrictEqual

Assert.Subset

Assert.Superset

Assert.Throws

Assert.ThrowAny

Assert.ThrowsAnyAsync

Assert.True

 

 

Should:

Should.CompleteIn

Should.NotThrow

Should.Throw

Should.ThrowAsync

Should.Equals

Should.ReferenceEquals

Should.GetHashCode

Should.GetType

Should.MemberwiseClone

   .ShouldBe

   .ShouldBeAssignableTo

   .ShouldBeGreaterThan

 

 

 

 

 

(以上有参考,整理的比较久不记得了,有熟悉的麻烦帮我补充一下)

以上是关于Xunit常用断言整理&带一点Shouldly介绍的主要内容,如果未能解决你的问题,请参考以下文章

使用 XUnit 断言异常

XUnit 模拟传递和断言集合

.should('exist') 断言在赛普拉斯上是多余的吗?

流利的断言:XElement .Should().HaveValueContaining?

Fluent 断言 PropertyInfo BeDecoratedWith

节点 mocha 数组应该包含一个元素