欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

测试框架nunit之assertion断言使用详解

程序员文章站 2023-12-21 11:57:58
任何xunit工具都使用断言进行条件的判断,nunit自然也不例外,与其它的xunit(如junit、phpunit、pythonunit)相比,由于大量使用了generi...

任何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);

上一篇:

下一篇: