十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

NUnit之Assertion详解

上一篇 / 下一篇  2012-02-09 22:05:41 / 个人分类:其它

文章来源
  • 文章来源:【转载】

园子里有了不少介绍NUnit文章,想到以前本人在上一家公司时也写过内部的PPT介绍,故将其整理、修改,并将分成以下三部分分别进行介绍:

~PTK5{#d0

1:NUnit之Assertion详解

J`5v@+om%qLT1KR J0

2:NUnit之Attribue详解51Testing软件测试网u n p zU6^:hp+~

3:NUnit扩展

?!c5dNgZB{0

其中1、2部分比较简单,仅供对NUnit不太了解的网友参考,有兴起对NUnit进行扩展的网友可以关注第三部分。51Testing软件测试网 R*Yv^9B(_

  

sDuk6t%I0

NUnit之Assertion详解51Testing软件测试网5Rm ps3Zh*[r~+o'YCO2^

 51Testing软件测试网A@3Pu%h0ec`v

NUnit是.Net平台的测试框架,广泛同于.Net平台的单元测试和回归测试中。51Testing软件测试网O"?nWfn

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

3Q:^F0P9ZmG2TK0

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

 

q"bgRg.@0

一:Assert类

+x)Wx.V m@ l0

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

t^ W]-CT0

  

;A2uF^Ol9@0

1:相等/不相等判断

mD#}a'A!@n0

AreEqual:判断两个值相等

S8uv#`/B G#V"a0

AreNotEqual:判断两个值不相等

!Y0f7~Em4k9F0

示例:

F4S4Gw c U2n m+|0
Int a=151Testing软件测试网$L$eR5X
T6{
Assert.AreEqual(a,1);//通过判断51Testing软件测试网Rc0s7ot/cYj
Assert.AreEqual(a,2);//不能通过判断

 51Testing软件测试网QJ2_4DC'Qu q

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

7G+H%`Y.l3@L"T)[Re'r(t0
Assert.AreEqual(inta,intb,stringmessage);51Testing软件测试网"e5`9g_B_+C!NX;[x"NZG
或者 Assert.XXX(inta,intb,stringmessage);

其中第三个参数是条件不通过时输出的信息,以便于错误的定位51Testing软件测试网1A/|"T i:\

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

NfZ0Q`5Zf0

例如以下代码:

,F k0a)_Y6Xi0
doublea =1.1;
/bjq7BL |Kv*c0doubleb =1.11;
7r{ Kp7bM%nG0doublec =0.1;51Testing软件测试网0kh:c*H `$Y)O'Z
Assert.AreEqual(a, b, c);//通过判断
$\8kR8LLVj0
c=0.01;51Testing软件测试网\8h\*H'q |K%@
Assert.AreEqual(a, b, c);//不能通过判断


\4y)Jd R[1}o1u5m02:类的判断

\6pQPpR;~J0

AreSame:判断两个对象相等51Testing软件测试网u@p4Z$h

AreNotSame:判断两个对象不相等

9}1IZ&?#t;Y"K_*X0

Contains:判断是否是否某对象

5U!gMT'Fxh;z0

示例:51Testing软件测试网~/p#v%M$Z"Wv

List<string> list =newList<string>();
m[J@dZP7C0list.Add("a");51Testing软件测试网$\-m Rc S2Lg
list.Add("b");
vuQ+`3c)sO5[G;Z0Assert.Contains("a", list);//通过判断51Testing软件测试网LB2a ` F8Aa `o!b
Assert.Contains("aa", list);//不能通过判断

 51Testing软件测试网 sES7t2[*` H

3:条件判断

$d"mT"Lb2ae ]%\0

IsTrue:判断条件为真

S*@Q|6D0z S!d0

True:同上51Testing软件测试网6P p)q/P-Ky

IsFalse:判断条件为假

An6K|9q Y F0

False:同上

|F-^/xVyH v_(c5_ `0

IsNull:判断是否为空51Testing软件测试网Xb0k PX*e/J)K5q

Null:同上51Testing软件测试网 T%aV+]9v r"S'C

IsNotNull:判断不为空间51Testing软件测试网I-tx+A7O8?

NotNull:同上

8w1hHtV&sx U$s0

IsNaN:判断数值是Nan

r0v;c q D D/^+R0

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

"j%T-_e;qVm$ET q0

IsEmpty/IsNotEmpty:判断集合是否为空/不为空51Testing软件测试网1Wg&lH;B)}.NT

w4ZN-PxZB1fR2L051Testing软件测试网P I;O5c*Qpt

示例:

IA$[G.zx*VE0
inta=100;51Testing软件测试网a:[ C
nhEc
Assert. IsTrue(a==100);//通过判断
0{~A5w1mRD0O0
Assert. True(a==100);//通过判断

 

4{6Z;\p$ba0

4:比较判断

5b aH3j!o-S y9c0

Greater:大于

G;WK I4W B.e i/F\0

GreaterOrEqual:大于等于

1\p'iA*[)f'c)Y-p/Xa0

Less:小于51Testing软件测试网1N(B a7d&OX8Fqm-TO

LessOrEqual:小于大于

7{#T4Z{ q W Qg0

示例:

0N w'_ GgHy_`-i0
inta =100;51Testing软件测试网H@us'WVQ`
Assert.Greater(a,99);
b6D1NN3y0Assert.GreaterOrEqual(a,100);

 51Testing软件测试网}%|![3WM$M,yX/ss,L%K

5:类型判断

~&~)Gxn7aM(cq0

IsInstanceOfType/ IsNotInstanceOfType:是/不是某个类的实例(从2.5之后支持泛型)51Testing软件测试网YO)rTkd{

例如:

4uu ?ebYh0
publicclassPerson
O)l`L|M0{
hh2o2\+bb0publicstringname {set;get;}
8?p"\:cF0}51Testing软件测试网af/O%a%p9f{ j
51Testing软件测试网/a,ig+Z F"n
Person p =newPerson();51Testing软件测试网 h,h#x3XV!oa ]
p.name ="a";51Testing软件测试网.q$|4Gq&x at{&w:~
Assert.IsInstanceOf(typeof(Person), p);//通过判断
6D.N k6GJ?:K0
Assert.IsInstanceOf(typeof(System.String), p);//不能通过判断

 

B@$T1T"j5lyn0

6:异常判断51Testing软件测试网UN%C Fj!Q

Throws:应该抛出某类型的异常51Testing软件测试网~Ih8A[6a"}aCO2S

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

+Fb5Ej3Q Bi:F9|Q,`0

 51Testing软件测试网3T$j,nXE-WLq1@B

7:其它常用的方法

'^f;Uy Ww3h[*R0

Pass:强行让测试通过51Testing软件测试网g8c"u%@lvZ}

Fail:强行让测试失败51Testing软件测试网#^v4hxwX)V M

Ignore:忽略该测试方法

5v+Nh'h"T0

Inconclusive:未验证该测试51Testing软件测试网OF-N/I L%y

 

H A4L Zx3z0

二:StringAssert类51Testing软件测试网JGI3w!cjX

StringAssert用于String类型的断言判断:51Testing软件测试网f{)G(r:mxt

StringAssert.Contains:是否包含子串

sW3le#P1Md0

StringAssert.StartsWith:是否以某子串开头51Testing软件测试网:e0As_^;m

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

"~9wt&v%dF4zA+f0

StringAssert.AreEqualIgnoringCase:两个字符串是否在不区分大小写时相等51Testing软件测试网e,UQLF7N%B _1E

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

b_Q)VL%DK]0

示例:51Testing软件测试网C8YV} @;S

strings1 ="abc";51Testing软件测试网8X_4b"~)cSk

#T#]Z VG#q l0StringAssert.Contains("b", s1);
ZW:EO#?;i2|8E0StringAssert.StartsWith("a", s1);51Testing软件测试网1oZF@t r2SsPg
StringAssert.EndsWith("c", s1);
"N,jDt'R8N051Testing软件测试网(mW(]~3wK;Wy c
strings2 ="aBc";
+cWO S"J \#h4w$ECCg0h0StringAssert.AreEqualIgnoringCase(s1, s2);51Testing软件测试网p@1|\xd+W

6{B D ^S\[:s0StringAssert.IsMatch("[a|book]","123");

 51Testing软件测试网n)[7uo{1|

三:CollectionAssert类51Testing软件测试网x%| U)E:l2O^lXs

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

aw/n3JH bc*I O d0

AllItemsAreNotNull:集合中的各项均不为空51Testing软件测试网[I T(h1lT3x0K

AllItemsAreUnique:集合中的各项唯一51Testing软件测试网a#B^+s-SX4v"WAH

AreEqual:两个集合相等51Testing软件测试网cs/p^7s)r*w

AreEquivalent:两个集合相当

p[ Pvf;^~8rC3Z+A0

AreNotEqual:两个集合不相等

X b1[-l?$qMpg%r,{[1s0

AreNotEquivalent:两个集合不相当

a*`E^[ ED @c3c0

DoesNotContain:集合中不包含某对象

4b#W(P(]Z$bS0

IsSubsetOf:一个集合是另外一个集合的子集51Testing软件测试网3y M8K)x5E z E-M

IsNotSubsetOf:一个集合不是另外一个集合的子集51Testing软件测试网P,^Ea `

IsEmpty:集合为空

)?:Q/Q!TD@oJq c0

IsNotEmpty:集合不为空

C].AV)}[0

IsOrdered:集合的各项已经排序51Testing软件测试网t&TyP)r4m*wW

 

'S v!l\E6}0

示例:51Testing软件测试网a:jf;S:{@\o

List<int> a =newList<int>();
XwrzFQ+oO0List<int> b =newList<int>();
O E%YUv4A051Testing软件测试网4W1O6U1s&n1gd,Yh k
CollectionAssert.IsEmpty(a);51Testing软件测试网D{[,k+m
51Testing软件测试网 f!A`.b'l0S fQ
for(inti =1; i <=10; i++)51Testing软件测试网-Zn }B?B*?
{
aAjt J.bS0a.Add(i);51Testing软件测试网i/R8{+f+A.gR
b.Add(i);51Testing软件测试网F&gP$CGmUI
}
NvlaO'Nb+A)CW.Sy051Testing软件测试网/xo R0Yl ~0M
CollectionAssert.AreEqual(a, b);51Testing软件测试网Vv2gbs8i*y^8|
CollectionAssert.IsOrdered(a);
w!K[0I)c2njH n0
RBV"I&]$@0b.Remove(1);
Vf*`&s;m1MYr'F\j0CollectionAssert.IsSubsetOf(b, a);
GZ0?HRQet6Y051Testing软件测试网ciq W La:s n k
CollectionAssert.AreEqual(a, b);

 51Testing软件测试网I!GA*K'wF D(W;`7\

后记:关于NUnit的断言就大概介绍这些,其实,不仅仅是测试人员,.Net程序员也应该熟悉掌握NUnit,以保证自己的代码质量,关于NUnit的进一步使用,将陆续介绍。

.Dj9h#Y(r7y)J.K0

由于本人水平有限,不妥之处,欢迎大家批评指正,谢谢!

,~V&P9VD D}Z3n0

TAG: NUnit nunit

 

评分:0

我来说两句

Open Toolbar