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

NUnit之Assertion详解

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

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

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

wV Zr3_-EFo#PA'W0

1:NUnit之Assertion详解51Testing软件测试网:Fp$oA5k/XY Qg C

2:NUnit之Attribue详解

OT cW5d\ H0

3:NUnit扩展

Xa B#d-h0

其中1、2部分比较简单,仅供对NUnit不太了解的网友参考,有兴起对NUnit进行扩展的网友可以关注第三部分。51Testing软件测试网/}(B)R J h,^vq7z#E-m

  51Testing软件测试网6m+| ^|&Gk9XL|)r_

NUnit之Assertion详解

\.j1aF]#C1S)Wp9t0

 51Testing软件测试网 f3^_$yA#M:U/k-nxGY

NUnit是.Net平台的测试框架,广泛同于.Net平台的单元测试和回归测试中。

,S }gNo(D#Fy0

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

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

?"y|;UB{,Hx)Xx0

 

/|8j {8g y"}&q0

一:Assert类51Testing软件测试网J uto8i

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

q1ji'Tu&U U7s9S9]b0

  

*tY;^-S.m^ z)`0` [0

1:相等/不相等判断

G)ImM}&?0

AreEqual:判断两个值相等51Testing软件测试网F2V!gd6n

AreNotEqual:判断两个值不相等

3bj8U0Z-F?x \+BWW0

示例:51Testing软件测试网IF G&dgi lM

Int a=1
:|tK{5u#`K Q%R0Assert.AreEqual(a,1);//通过判断51Testing软件测试网T GL5Cf"mc;@$k1}
Assert.AreEqual(a,2);//不能通过判断

 51Testing软件测试网s/w }(an1K-o-hU

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

0i |dH%d/mM0
Assert.AreEqual(inta,intb,stringmessage);
ChO6?:Gr A!V0或者 Assert.XXX(inta,intb,stringmessage);

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

zna-K*~'N!U0

对于double和decimal类型,这两个方法还支持比较时的浮点误差51Testing软件测试网Z2M%Pt#x3^o D^

例如以下代码:

6~O4Rdk!^ v"D0
doublea =1.1;51Testing软件测试网V}7chf5Ps_.V	U
doubleb =1.11;51Testing软件测试网8Fqp$F){D
doublec =0.1;51Testing软件测试网 ~7~#BXG"I
Assert.AreEqual(a, b, c);//通过判断
+?`d3r)d0
c=0.01;51Testing软件测试网.f&W5IJd#w+h$h
Assert.AreEqual(a, b, c);//不能通过判断

51Testing软件测试网-B|G.S5gqFn
2:类的判断51Testing软件测试网aAk$o Me.[t

AreSame:判断两个对象相等

vC U | ?3LP2] O&q!SW0

AreNotSame:判断两个对象不相等51Testing软件测试网`u-@x[6Nj

Contains:判断是否是否某对象

tX m&VQ0

示例:

B_uV V*b@0
List<string> list =newList<string>();51Testing软件测试网Al'{}`
list.Add("a");
R"M:dZK9j0list.Add("b");
B6~0}"U:p?y+v0Assert.Contains("a", list);//通过判断
Y[0VG:CO0
Assert.Contains("aa", list);//不能通过判断

 51Testing软件测试网 ^\^ R9NMQL

3:条件判断51Testing软件测试网%a q0j4W8~CK

IsTrue:判断条件为真51Testing软件测试网7lWEsG

True:同上51Testing软件测试网~U6Sl ^q nvY

IsFalse:判断条件为假51Testing软件测试网U-JxQo8W oM

False:同上

.ru,ji0|7GL x0

IsNull:判断是否为空

#^/D4N[~bG'aq%K?"c0

Null:同上51Testing软件测试网f(?SrJ;z

IsNotNull:判断不为空间

~7}"S2Ny0

NotNull:同上

c6} Kfa'Dcn0

IsNaN:判断数值是Nan

6V.U6g3m8z rC:^ ?l0

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

(mMMN!l;HjARe+k0

IsEmpty/IsNotEmpty:判断集合是否为空/不为空
tRq\ H:Y|0
9h+o0B0c-lj3C%TD)I2]0

!RGVo;h0

示例:

(yL9s1rX0
inta=100;51Testing软件测试网E0mk0Y:R
Assert. IsTrue(a==100);//通过判断51Testing软件测试网%ZZ^)r*q/V
Assert. True(a==100);//通过判断

 51Testing软件测试网%A&p F2cV(S

4:比较判断51Testing软件测试网 gc HkdU8Oe

Greater:大于51Testing软件测试网9q"l] p0a7M1@ ?.i ~

GreaterOrEqual:大于等于51Testing软件测试网:q&JgX;V4sn(Dk `H

Less:小于51Testing软件测试网 ld+qz0O$E2NP

LessOrEqual:小于大于51Testing软件测试网o#\^ VR^6T

示例:

"U-N"O)D?3s(u kA0
inta =100;
%Hih1z5I2OZ.pj0Assert.Greater(a,99);
R(qT4b-uI0Assert.GreaterOrEqual(a,100);

 51Testing软件测试网 XZ eUYaA.{3_

5:类型判断

z'PaaT y6F5u*UD k0

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

viD!bW\h ?0

例如:

gXa*K5DFVYl0
publicclassPerson
Y8\.f-r.\n%t1U4EW0{51Testing软件测试网os!y&cL3a
publicstringname {set;get;}51Testing软件测试网8Bj$K#B YE(l
}
6u m kqDMb051Testing软件测试网8e6K"SA3mvF5w6h
Person p =newPerson();51Testing软件测试网b9b_c.zuwX
p.name ="a";51Testing软件测试网HgzQ@.Z
Assert.IsInstanceOf(typeof(Person), p);//通过判断51Testing软件测试网 Zy2[(pcwV Zc
Assert.IsInstanceOf(typeof(System.String), p);//不能通过判断

 

2X/qY2Y0Hzi&W8q7[0

6:异常判断51Testing软件测试网e:|n S?R$KX'Z

Throws:应该抛出某类型的异常51Testing软件测试网I){0Ro&tK

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

yL5G%L y&iP^*h0

 51Testing软件测试网$`'z)r(la\z;V

7:其它常用的方法51Testing软件测试网3frX \#G,x1~

Pass:强行让测试通过51Testing软件测试网(O*@eL2A F8T

Fail:强行让测试失败51Testing软件测试网N,n%@?8x1o_1A

Ignore:忽略该测试方法

pXf+J9}n d0

Inconclusive:未验证该测试51Testing软件测试网Ox&i\ V!?yq| iV

 51Testing软件测试网z @(X&U1A

二:StringAssert类51Testing软件测试网1JJ!dz^+A

StringAssert用于String类型的断言判断:51Testing软件测试网3T%fc5VNoow b?

StringAssert.Contains:是否包含子串

|+?*umzDC0

StringAssert.StartsWith:是否以某子串开头51Testing软件测试网x\2Je&G*B

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

eb L[9^RoWg~0

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

Z"] F3S*@'Zh0

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

&Pas1s+Z,N7q/IRh0

示例:51Testing软件测试网0IO.vM3_"eP

strings1 ="abc";51Testing软件测试网 u;HQ^!g%U3_

BB\ aN0StringAssert.Contains("b", s1);
#f6eZ2F-c%_{uj+f.|_0StringAssert.StartsWith("a", s1);51Testing软件测试网DQ ~q5wXLO
StringAssert.EndsWith("c", s1);51Testing软件测试网'c(O6A!R(s9b
51Testing软件测试网e*UB(h7_$mIP
strings2 ="aBc";
j\s5ST?\ H0StringAssert.AreEqualIgnoringCase(s1, s2);
WN8])q+V051Testing软件测试网F*Z?|N"K\/Y1|
StringAssert.IsMatch("[a|book]","123");

 51Testing软件测试网%P+Niqsz;K#U `z

三:CollectionAssert类

)V.B)[&k1\ n*{2B3L0

AllItemsAreInstancesOfType:集合中的各项是否是某某类型的实例51Testing软件测试网o_9hY'D!Db8E

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

Lge5TPH:K0

AllItemsAreUnique:集合中的各项唯一51Testing软件测试网e0I"m-e6F7[|

AreEqual:两个集合相等51Testing软件测试网 F zvz/v8R)E

AreEquivalent:两个集合相当

i%N!d4_2eX'O0

AreNotEqual:两个集合不相等

DS6P ~E0

AreNotEquivalent:两个集合不相当51Testing软件测试网(ZKdXE`6h1a

DoesNotContain:集合中不包含某对象51Testing软件测试网H8f}sV3v

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

4{ol&B9]0

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

f5bt&o:]CI/PCi+{0

IsEmpty:集合为空51Testing软件测试网#}*?Z.r7Q,C\

IsNotEmpty:集合不为空51Testing软件测试网2X"Z-`9QkY)C'bn

IsOrdered:集合的各项已经排序51Testing软件测试网fF Bp}$N

 51Testing软件测试网1\kH/ti{-b6G,E

示例:

,K1N6~4X:i?0
List<int> a =newList<int>();
M}@ h+D0List<int> b =newList<int>();51Testing软件测试网-kTaxr

ZE`z ad)n0CollectionAssert.IsEmpty(a);
JPE lH6Tg0
P`HJ;S}0for(inti =1; i <=10; i++)51Testing软件测试网;k!};Fp'B(H
{
K'V*]"s(zy.g0a.Add(i);51Testing软件测试网LW2POD
b.Add(i);
9q$z7KErPO J0}51Testing软件测试网Pgg:\`1O:E

fnXg:q0CollectionAssert.AreEqual(a, b);
|)LT!kPW/\0CollectionAssert.IsOrdered(a);
(tY6K{!JP051Testing软件测试网Y(B r5IC r1rb
b.Remove(1);
8`[!b&x0^*N Wh'v^0CollectionAssert.IsSubsetOf(b, a);
r Z)s\;WQC051Testing软件测试网+i~"AQk.I!]!C
CollectionAssert.AreEqual(a, b);

 

E [1k-[$v6H-Q4W1u0

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

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

i\j)A,UW.m0

TAG: NUnit nunit

 

评分:0

我来说两句

Open Toolbar