zibeike单元测试实践一:您的第一个单元测试
上一篇 / 下一篇 2008-08-25 20:40:04 / 个人分类:单元测试
Is G5L ^Yq0 本系列课程是以《Pragmatic Unit Testing In C# with NUnit》这本书为基础,是zibeike在翻译和理解的基础上整理而来,希望对大家有些帮助,内容还是很多的。好的,那下面开始我们的单元测试之旅吧。
y2ZO~#c]cm0 您的第一个单元测试:
)DE Pk1k ~0v!B+O"B0 单元测试是一段程序代码,这些程序代码是为了检验另一段程序代码的行为是否达到预期而写的。那么,该如何来达到这样的目的呢?
(FHXkMh
k5j3?0 为了检验代码的行为是否达到预期,你可以使用assertion,这是个非常简单的方法调用来验证某些事情是否是正确的。例如,方法IsTrue检查了给定的布尔条件是否是真,如果条件不为真,那验证失败。您可以象下面这样来实现这个程序:51Testing软件测试网7{D\9e7]g_
public void IsTrue(bool condition) {51Testing软件测试网w4jTmPa
if (!condition) {51Testing软件测试网+V+RNs3nJC3BuX0_U
abort();
rJ
GX&I
J$@/g0 }
'KIF;QDA)hK ]0 }
$Efb'k5]4Vf/f3~0 你可以使用断言(assert)来检查所有事情,包括数字是否互相相等等。51Testing软件测试网#E1S-t ]im X"d"d
int a = 2;51Testing软件测试网 y|DeN6C
IsTrue(a == 2);
~1tl(T*_-u'J/~k0 如果在调用IsTrue时,a不等于2,程序就会中止。
;NC6wXPc)]B S0 因为我们是在检查是否相等,因此对这些数字使用断言会比较容易。为了检查两个整数是否相等,我们可以写一个方法,这个方法是以两个整数作为参数。
)E]_^NK0n0 public void AreEqual(int a, int b) {
![,\4sQ'v(a ^(l0 IsTrue(a == b);
'^/a;j&K}*[0 }
OotpOj0 只是用这两个断言,我们就可以开始写一些测试代码了。在下一章,我们会看到更多关于断言在单元测试代码中的使用。但是首先,我们先来思考一下在写代码之前,我们需要什么样的测试。51Testing软件测试网nw,f8b8Eb.^'h6K&K
1.1 测试计划
H,Z;fU*K0 我们来看一个简单的例子,一个静态方法用来寻找list中的最大数。51Testing软件测试网`YW!s4o(R mU
static int Largest(int[] list);
!?yM:nM0 也就是说,给一组数,如[7,8,9],这个方法应该返回9。这是一个合理的测试。那有没有其他的测试呢?现在花一分钟,你要想出尽可能多的测试情况。
I:s
g Y4QI+p0i-B^m0 你想出了多少测试用例呢?51Testing软件测试网Wi]6fUR
数组中的顺序不影响结果,所有你可以得到下面的想法:51Testing软件测试网j$ng8H9x7V%`y
传入的数据 预期的结果51Testing软件测试网KFJR
U!lt`,|P
[7, 8, 9] 951Testing软件测试网,ZJ9P8A v:}&SU \2{
[8, 9, 7] 9
+i?"F@,{+R0 [9, 7, 8] 951Testing软件测试网8Pg?
H8r_/\qj#}
如果有两个最大值呢?51Testing软件测试网bXW5K/k6I
[7, 9, 8, 9] 951Testing软件测试网hX*Y.Op
因为是int类型的,不是对象类型,你可能不需要关心哪一个9被返51Testing软件测试网jB:mqg9DquL7e
回。51Testing软件测试网*_ @|;C4@_n
如果只有一个数字呢?51Testing软件测试网sU.p g"I'mEC
[1] 1
v%t;e N)h;c0 如果是负数呢?
'u6T)@0KZ9d0 [-9, -8, -7] -751Testing软件测试网"JY:_2Hj@
然后,我们来实际的写“largest”方法,并且测试它。这是我们的第一个实现的代码:
&L/FE\3H%A`0 public class Cmp f -
5O^-T
m5w0 ///
%W gcf#U"RyqC;c0 /// <summary>51Testing软件测试网T(M5z ];j@%qg3~
/// Return the largest element in a list.
t7bX7E+H&_7vD0 /// </summary>
k)O1p
jM` _J0 /// <param name="list"> A list of integers </param>
No!ktH~&hG F9p0 /// <returns>51Testing软件测试网;y H6P3i
e$Vd
/// The largest number in the given list
3cA%i)j?i9kk0 /// </returns>51Testing软件测试网N8X f;K1MuL/n
///
P)uK&U1a+w_$A'QB0 public static int Largest(int[] list) {51Testing软件测试网
\rX@H4{f
int index, max=Int32.MaxValue;
nUyc(O9J']Z:h0 for (index = 0; index < list.Length-1; index++) {51Testing软件测试网
e&Tl%Av l|1y
if (list[index] > max) {
ij3w4qt]0 max = list[index];
$q)ZA)y"Ag|0 }51Testing软件测试网JDu"aJS.@
}
V(AGQu0return max;51Testing软件测试网kaC6e'f%C&}n
}51Testing软件测试网*g}&b:IdT]r
}51Testing软件测试网SM[(hBH
现在,我们对测试是有些了解了吧,我们下面就要学习使用NUnit框架来实现c#的测试。51Testing软件测试网*Y;y/S+@d CCRD
#_m%R1i;T1Jh0
3@eL ]9u.^a051Testing软件测试网6akuX NQdQ