不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

4. 一次简单的集成测试

上一篇 / 下一篇  2007-02-25 10:50:20 / 个人分类:单元测试


qEMo$n p2l}9x051Testing软件测试网+b&BsqKMQ] m
第四步:一次简单的集成测试测试Card类,Card类需要使用Suit类和Cfg类,这两个类在这之前已经完成了测试。在这一步需要将三者集成在一起进行测试。在测试Card类时将不再考虑对SutiCfg类的测试,而仅仅是考虑Card类本身的测试,针对Card类的每一个方法进行测试。51Testing软件测试网jHH*[;X*M-g g j9Z#b
使用Jtest自动生成测试代码,查看测试代码后发现,仅自动生成了部分测试代码,并且没有根据需要输入适合的值,我们需要手工完成部分测试代码。
;H V.|(W_+R}0从最复杂的一个方法开始入手。(当时我从最复杂的方法入手是因为有部分技术问题需要解决);getIcon方法返回某张纸牌所对应的图片文件,这里需要使用Cfg类,过程是根据牌的花色和分值计算出所对应的数组位置,因为返回的结果是一个Image类,所以在对比测试结果时有一些难度,而该数组并没有进行初始化,所以对比时不管测试结果如何对比的结果总是正确的。对此先对Cfg中的数组cardIcons进行初始化,这里仅始化正确结果的数组,最后进行与预期结果进行对比;代码示例如下:
:i,`*a2Wp8Y+z Nz0  Card card;              //建立card
P lw:W{C4_0  Suit suit;               //建立suit
+rR*Q,q)L*}2g0  suit=Suit.CLUB;      //suit引用51Testing软件测试网 _3jA3V Ye1R|
  card=new Card(suit,'A');   //初始化card51Testing软件测试网 lf3i:B;r6od'g+y
  int ER=1;                    //预期位置是数组151Testing软件测试网3FGP"O'r1O
  byte buffer[] = new byte[ER];51Testing软件测试网RJR(L#gvp
  Cfg.cardIcons[ER]= Toolkit.getDefaultToolkit().createImage(buffer);;      //初始化数组151Testing软件测试网(qkCh%U*?FL
  Image RETVAL=card.getIcon();
;]X3r O1? ^b"p2qF0  assertEquals(Cfg.cardIcons[ER],RETVAL);   //对比测试结果51Testing软件测试网~J$x(oT Y
注:如果不对Cfg中的数组进行初始化,则对比结果永远是正确的。51Testing软件测试网7a1w)bO.Z
接下来对每一个方法进行测试,这些方法可以分为几类。51Testing软件测试网cx-|#{O8Ie{$f!AD
构造方法:51Testing软件测试网l0` _L.x PL
·         Card()51Testing软件测试网9zg%M5A:k"rz
·         Card(final Card card)
)?p.j [Rl?!B |^!v0·         Card(Suit suit, char value)
JN7LBi9S I0赋值的方法:51Testing软件测试网Z*Zq mI|
·         void  assign (final Card rhs)51Testing软件测试网%W r;O f9g7E8cu`7sn
·         boolean setSuit(Suit newSuit)51Testing软件测试网 x4b[&h~8_6p
·         boolean setType(char newType)51Testing软件测试网4NF f o-h1c*x5d
取值的方法51Testing软件测试网/{ k3h~8U8gW8ea@
·         char cardType()  51Testing软件测试网1KdjYu_DUa
·         Suit getSuit()
1B(v*|`pm_(@w0·         String toString()51Testing软件测试网'vj5N9CrD8hP L?
有效性判断51Testing软件测试网q.g,mt c
·         final boolean isAce()
#u[S!u9u4Vv0·         final boolean isFaceCard()
PX UU7hm5p:s0·         final boolean isValid()
;e,xY"n Mu0·         final boolean isValueCard()
4U,{e-V7J0运算
Se&f-L0^7g6E5Q0·         boolean equals (Object obj)51Testing软件测试网0z6[i7T$rpY
·         boolean lessThan(Card rhs)
U"P*k3[\l Gl0·         char suitAsChar()51Testing软件测试网wT6P ~qfhd
·         Image getIcon()
F&tQ%mmcf5} T0在这里发现当对某一个方法进行测试时可能会调用另一个方法。或者是在测试过程中需要借用另外的方法。那么这些方法本身是否有一个测试的先后顺序呢?例如:
n.l E8K&W.b0getIcon方法中调用了suitAsCharisAceisValueCard三个方法,先测试这三个方法是否正确,再测试getIcon方法是否正确,这样当getIcon方法出现错误时,可以确认是由于getIcon方法本身的错误还是由于suitAsCharisAceisValueCard三个方法中出现了错误。
,P,fQw8IF0手工完成每一个类的测试代码。可以使用Juint实现对已经完成的三个类的一次性完整测试。
)^N@Gi(m0下图例出了使用Juint对三个类进行测试,并且在三个类都有一处错误。51Testing软件测试网1ru[+V4K)e$grB:K
51Testing软件测试网l|:_N$}K

d&GC't g3xC1f`)Ae|0思考问题:·         类中有方法AB测试方法A时已经对B进行了测试,是否还需要对方法B进行单独的测试呢?51Testing软件测试网R!kN x~-Kk6Gzl
·         suitAsChar方法为例,如果设计文档只说明了返回值,而并没有明确说明在何时才会有该返回值,这时应该如何设计测试用例
%a Zs\|0` M\p0·         设计说明文档中是否会详细说明方法的执行过程,因为有时是根据执行过程来设计测试用例。例如:getIcon方法,当我们不知道Cfg类中的cardIcons需要初始化时这个测试用例的设计可能就是错误的,因为即使返回的结果与预期不相符,但对比结果仍然是正确的。51Testing软件测试网^P G*L:mFM _G#W

TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar