手机
当前位置:查字典教程网 >编程开发 >C#教程 >测试框架nunit之assertion断言使用详解
测试框架nunit之assertion断言使用详解
摘要:任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xUnit(如Junit、phpUnit、pythonUnit)...

任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xUnit(如Junit、phpUnit、pythonUnit)相比,由于大量使用了Generic、Attribute等语言特征,NUnit提供了更为方面、灵活的测试方法,下面先介绍一下断言。

Nunit一共有四个类断言类,分别是Assert、StringAssert、FileAssert和DirectoryAssert,它们都在NUnit.Framework命名空间,其中Assert是常用,也是我们最熟悉的,而另外三个断言类,顾名思义,分别对应于字符串的断言、文件的断言和目录的断言,理论上,仅Assert类就可以完成所有条件的判断,然而,如果合理的运用后面的三个断言,将使代码更加简洁、美观,也更加便于理解和维护。

一:Assert类

对于我们通常的单元测试代码,Assert类中的静态方法就可以完成,其中大家最熟悉的应该是Assert. AreEqual()方法,其实,除了AreEqual,NUnit还提供了众多的比较方式,满足不同的代码要求。

1:相等/不相等判断

AreEqual:判断两个值相等

AreNotEqual:判断两个值不相等

示例:

复制代码 代码如下:

Int a=1

Assert.AreEqual(a,1);//通过判断

Assert.AreEqual(a,2);//不能通过判断

注意,除了AreEqual/ AreNotEqual,下面几乎所有的方法都支持多态(多种数据类型),以及多参数,除了经常使用的Assert .AreEqual(int a,int b),还有一种典型的参数形式:

Assert.AreEqual(int a,int b,string message);

或者 Assert.XXX(int a,int b,string message);

其中第三个参数是条件不通过时输出的信息,以便于错误的定位

对于double和decimal类型,这两个方法还支持比较时的浮点误差

例如以下代码:

复制代码 代码如下:

double a = 1.1;

double b = 1.11;

double c = 0.1;

Assert.AreEqual(a, b, c);//通过判断

c=0.01;

Assert.AreEqual(a, b, c);//不能通过判断

2:类的判断

AreSame:判断两个对象相等

AreNotSame:判断两个对象不相等

Contains:判断是否是否某对象

示例:

复制代码 代码如下:

List<string> list = new List<string>();

list.Add("a");

list.Add("b");

Assert.Contains("a", list); //通过判断

Assert.Contains("aa", list); //不能通过判断

3:条件判断

IsTrue:判断条件为真

True:同上

IsFalse:判断条件为假

False:同上

IsNull:判断是否为空

Null:同上

IsNotNull:判断不为空间

NotNull:同上

IsNaN:判断数值是Nan

IsEmpty/IsNotEmpty:判断字符串是否为空/不为空

IsEmpty/IsNotEmpty:判断集合是否为空/不为空

示例:

复制代码 代码如下:

int a=100;

Assert. IsTrue(a==100);//通过判断

Assert. True(a==100);//通过判断

4:比较判断

Greater:大于

GreaterOrEqual:大于等于

Less:小于

LessOrEqual:小于大于

示例:

复制代码 代码如下:

int a = 100;

Assert.Greater(a, 99);

Assert.GreaterOrEqual(a, 100);

5:类型判断

IsInstanceOfType/ IsNotInstanceOfType:是/不是某个类的实例(从2.5之后支持泛型)

例如:

复制代码 代码如下:

public class Person

{

public string name {set;get;}

}

Person p = new Person();

p.name = "a";

Assert.IsInstanceOf(typeof(Person), p);//通过判断

Assert.IsInstanceOf(typeof(System.String), p);//不能通过判断

6:异常判断

Throws:应该抛出某类型的异常

DoesNotThrow:不应该抛出某类型的异常

7:其它常用的方法

Pass:强行让测试通过

Fail:强行让测试失败

Ignore:忽略该测试方法

Inconclusive:未验证该测试

二:StringAssert类

StringAssert用于String类型的断言判断:

StringAssert.Contains:是否包含子串

StringAssert.StartsWith:是否以某子串开头

StringAssert.EndsWith:是否以某子串结尾

StringAssert.AreEqualIgnoringCase:两个字符串是否在不区分大小写时相等

StringAssert.IsMatch:是否匹配,(使用正则表达式进行字符串比较)

示例:

复制代码 代码如下:

string s1 = "abc";

StringAssert.Contains("b", s1);

StringAssert.StartsWith("a", s1);

StringAssert.EndsWith("c", s1);

string s2 = "aBc";

StringAssert.AreEqualIgnoringCase(s1, s2);

StringAssert.IsMatch("[a|book]", "123");

三:CollectionAssert类

AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例

AllItemsAreNotNull:集合中的各项均不为空

AllItemsAreUnique:集合中的各项唯一

AreEqual:两个集合相等

AreEquivalent:两个集合相当

AreNotEqual:两个集合不相等

AreNotEquivalent:两个集合不相当

DoesNotContain:集合中不包含某对象

IsSubsetOf:一个集合是另外一个集合的子集

IsNotSubsetOf:一个集合不是另外一个集合的子集

IsEmpty:集合为空

IsNotEmpty:集合不为空

IsOrdered:集合的各项已经排序

示例:

复制代码 代码如下:

List<int> a = new List<int>();

List<int> b = new List<int>();

CollectionAssert.IsEmpty(a);

for (int i = 1; i <= 10; i++)

{

a.Add(i);

b.Add(i);

}

CollectionAssert.AreEqual(a, b);

CollectionAssert.IsOrdered(a);

b.Remove(1);

CollectionAssert.IsSubsetOf(b, a);

CollectionAssert.AreEqual(a, b);

【测试框架nunit之assertion断言使用详解】相关文章:

浅谈C#中Process类的使用详解

深入分析C#中WinForm控件之Dock顺序调整的详解

深入多线程之:Reader与Write Locks(读写锁)的使用详解

C#词法分析器之正则表达式的使用

解析C#中@符号的几种使用方法详解

基于C# MBG 扩展方法类库的使用详解

基于DateTime.ParseExact方法的使用详解

C#词法分析器之构造NFA详解

C#词法分析器之转换DFA详解

c#之滚动字幕动画窗体的实现详解

精品推荐
分类导航