热爱测试,主要研究性能测试和自动化测试方面的技术,希望与同样对测试有热情的你一同进步成长

zibeike单元测试实践一:您的第一个单元测试

上一篇 / 下一篇  2008-08-25 20:40:04 / 个人分类:单元测试

2L(|4uS1kLF_0     本系列课程是以《Pragmatic Unit Testing In C# with NUnit》这本书为基础,是zibeike在翻译和理解的基础上整理而来,希望对大家有些帮助,内容还是很多的。好的,那下面开始我们的单元测试之旅吧。
ot |!AWD$`s0     您的第一个单元测试51Testing软件测试网y~KRB*QC S:_b,u
     单元测试是一段程序代码,这些程序代码是为了检验另一段程序代码的行为是否达到预期而写的。那么,该如何来达到这样的目的呢?
4F1j-e%CZJE)v+_!x0     为了检验代码的行为是否达到预期,你可以使用assertion,这是个非常简单的方法调用来验证某些事情是否是正确的。例如,方法IsTrue检查了给定的布尔条件是否是真,如果条件不为真,那验证失败。您可以象下面这样来实现这个程序:
K6^_@q L['^w0     public void IsTrue(bool condition) {51Testing软件测试网0k8GYd kJ#` ?
        if (!condition) {
2C2Kyz2gF(z W-i_0          abort();51Testing软件测试网WW(H$?n c_!m
        }51Testing软件测试网(K/G/|6y)e
     }
:W7u3H(|2S0w |3o2A L0     你可以使用断言(assert)来检查所有事情,包括数字是否互相相等等。
9XpGJ Yi"U1fn0      int a = 2;
]P2O3eHb&p0     IsTrue(a == 2);51Testing软件测试网;[Y+Wuo(z
     如果在调用IsTrue时,a不等于2,程序就会中止。51Testing软件测试网uw[RW*}^
      因为我们是在检查是否相等,因此对这些数字使用断言会比较容易。为了检查两个整数是否相等,我们可以写一个方法,这个方法是以两个整数作为参数。51Testing软件测试网TDx'C6L4Z~%b'}"q ~
     public void AreEqual(int a, int b) {
8X$X&d(|4K0          IsTrue(a == b);
*W:Y-E/`m6dzM0     }
1Bq9w7P]9e(wF0    只是用这两个断言,我们就可以开始写一些测试代码了。在下一章,我们会看到更多关于断言在单元测试代码中的使用。但是首先,我们先来思考一下在写代码之前,我们需要什么样的测试。
r*y4^'zP!YZ!B7W0    1.1 测试计划51Testing软件测试网b+m9Qq%O2@P3H;y
     我们来看一个简单的例子,一个静态方法用来寻找list中的最大数。
z$dfFhz0     static int Largest(int[] list);
9VM;zUb6{0    也就是说,给一组数,如[7,8,9],这个方法应该返回9。这是一个合理的测试。那有没有其他的测试呢?现在花一分钟,你要想出尽可能多的测试情况。
?#U"j%t3P)N0     你想出了多少测试用例呢?51Testing软件测试网!t;u:_ x B
     数组中的顺序不影响结果,所有你可以得到下面的想法:
1f3Y/@@4t0    传入的数据        预期的结果
6O9a[ [^0      [7, 8, 9]      9
w"I t0N$rHF J0     [8, 9, 7]       9
I/M4B2r!F1wH;J$f0     [9, 7, 8]       951Testing软件测试网P2i4UJ~"IHZB ~
如果有两个最大值呢?
RE%m m ]0     [7, 9, 8, 9]      951Testing软件测试网`%Q I p.P/g
因为是int类型的,不是对象类型,你可能不需要关心哪一个9被返51Testing软件测试网p^%xA-k@B,]
回。51Testing软件测试网A6a8IOT%U,k4z
      如果只有一个数字呢?
/I(]:sV+z%K:m0      [1]               1
xW)dk+BFmmB0      如果是负数呢?
-tAc0D2C-TE#\0      [-9, -8, -7]     -751Testing软件测试网~e&B UcF `,G l;[F
      然后,我们来实际的写“largest”方法,并且测试它。这是我们的第一个实现的代码:
:jL9^H b0     public class Cmp f -51Testing软件测试网t9kA&lRN;S,_~+e n
   ///
qh*B8U9I0   /// <summary>51Testing软件测试网 G \%tE3t`aqQfvK
   /// Return the largest element in a list.51Testing软件测试网0W4g,J_j+K t
   /// </summary>51Testing软件测试网duvdplg4m9X
   /// <param name="list"> A list of integers    </param>51Testing软件测试网7V}M ~6ym4u
   /// <returns>51Testing软件测试网&wQBdc~x
   /// The largest number in the given list51Testing软件测试网1?{ g)~Gh*P7l;g
   /// </returns>51Testing软件测试网XP+w2Yu#`;gZR
   ///51Testing软件测试网 f#N+acw@L,S
   public static int Largest(int[] list) {51Testing软件测试网Vf2X5hZKn/F
   int index, max=Int32.MaxValue;51Testing软件测试网x$T?,I"QK;w
   for (index = 0; index < list.Length-1; index++) {
'Uop K Uke5pi0    if (list[index] > max) {
fpoqp[}0       max = list[index];
NLB6CD0       }
x#C)y?(qQ0    }51Testing软件测试网S u Q^,r.d's
return max;51Testing软件测试网 ?3RS1~g&wz8A
  }
5x3F1w?5~$v2p8JC4l9Hg0}
)} e-ljg3|6_d[0     现在,我们对测试是有些了解了吧,我们下面就要学习使用NUnit框架来实现c#的测试。51Testing软件测试网 XE)OX!r Rc r]%@r

51Testing软件测试网ZjH(m*x/y0^z2~


.H1}7|Y:H t`I(a0

mf.jvkL051Testing软件测试网M z ao_7H ~

转载请注明出自zibeike的blog:http://www.51testing.com/?3486651Testing软件测试网k_ u cw
51Testing软件测试网'o/G2F&I7{s


TAG: 单元测试 白盒测试

zyyhgl的个人空间 引用 删除 zyyhgl   /   2008-10-14 17:14:42
你好JUnit方法的意见呀,我是用java开发的,呵呵谢谢
jiamin_ff的个人空间 引用 删除 jiamin_ff   /   2008-09-01 10:22:08
你好我自己也写过.NET的UI测试程序,学习过觉得它只能做简单的界面程度,因为在处理嵌套弹出窗体时没法拿对第二个弹出窗体的实例。如果你知如何调用API做到可以加下QQ吗?我加了你,我的QQ是382069968
FISHY'S TRIBE 引用 删除 fishy   /   2008-08-26 11:48:41
支持原创

楼主如果对翻译或这写文章有兴趣,可以投稿51Tetsing的测试杂志《51测试天地》。
http://bbs.51testing.com/thread-107427-1-1.html
 

评分:0

我来说两句

Open Toolbar