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

5. 集成测试

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

5. 集成测试
t2O%fe[Y F^V.N0
6w,y-g:AHK0第五步:集成测试在测试项目中加入Deck类,使用Jtest自动生测试代码。检查自动生成的测试代码发现有部分没有判断结果。对些需要手工改写测试代码。51Testing软件测试网{)e _O ~]*rw
测试AddDeck方法在测试过程中需要调用toString方法对结果进行判断。预期的结果是"Card nums=52 [AH, 2H, 3H, 4H, 5H, 6H, 7H, 8H, 9H, TH, JH, QH, KH, AD, 2D, 3D, 4D, 5D, 6D, 7D, 8D, 9D, TD, JD, QD, KD, AS, 2S, 3S, 4S, 5S, 6S, 7S, 8S, 9S, TS, JS, QS, KS, AC, 2C, 3C, 4C, 5C, 6C, 7C, 8C, 9C, TC, JC, QC, KC]"在测试AddDeck方法的同时也对toString方法进行了测试;51Testing软件测试网`TtT;b fQ$k
测试burnIt方法public void testBurnIt1() throws Throwable {51Testing软件测试网,doib*I4x
        Deck deck=new Deck();
"o9zvx?Rw0        deck.addDeck(1);
6Hg]$wz+~.y6U0        deck.burnIt();51Testing软件测试网\)x j G+u*T xV+[Q#D
        String RET=deck.toString() ;
t,V}.B`0        String Exp="Card nums=0 []";
*q3@,IZ+E0Wd0        assertEquals(Exp, RET);51Testing软件测试网RYr@:uUF Q
  }51Testing软件测试网2L'~;vy!O
先增加一幅牌然后调用burnIt方法清除,使用toString方法取得返回结果,对返回结果进行判断。也可以使用getCards方法对测试结果进行判断。个人觉得getCards方法可能更加适合,因为该方法中并没有任何操作,不会对测试产生影响。下面的测试方法会不会更好一些呢?51Testing软件测试网:DH[$ge.DZ!| ?
  public void testBurnIt1() throws Throwable {
x%h5_+x&X*Qdi6b0        Deck deck=new Deck();
z;C^^*u;rE+Q"I.f0        deck.addDeck(1);51Testing软件测试网-N(pbW9hd
        deck.burnIt();
\(nbN6X1Ijfrv0        Vector RET=deck.getCards();
8sazcS4f0        assertEquals(0, RET.size());51Testing软件测试网;W RY\0V0M b~(D'~
  }51Testing软件测试网Mv/VOv+Fw _!R
测试getCard方法testGetCard1测试使用取边界值与预期值进行比较判断测试正确性的测试策略。下例为取第一个值;
Gz x"Yi#v/M8^*lB`%X*w0  public void testGetCard1() throws Throwable {
aoN6?.x#L0        Deck deck=new Deck();51Testing软件测试网*}@0E-V@H
        deck.addDeck( 1);
NO3c)T;nU0        Card card=deck.getCard();
2\.Jha)HYqKg0        Card card2=new Card();
_g p!Py}:uF0        boolean RET1=card.equals( card2);51Testing软件测试网[y%Nz7j
        assertEquals(true,RET1);
'Z"T m5Op3s1|#p0  }51Testing软件测试网)EG1?hUif Qpn
下面的例子中,测试了Deck类的异常情况;在测试过程中测试出现异常(不是错误)。对于这个例子我们是否需要考虑这种特殊情况呢?在BJ这个项目中会不会出现不增加牌而使用牌的情况呢?对于这种情况是否需要考虑程序的整体架构呢?(这种异常可能会由其他的代码来处理)
XK/_*Z-? N3w+O7Sb0  public void testGetCard3() throws Throwable {51Testing软件测试网3DZV-I1A8x`'L$z
        Deck deck=new Deck();51Testing软件测试网g"V1\8Q!PY$q
        Card card = null;51Testing软件测试网 Ygm ]K%uNl7f#J
        card=deck.getCard();
J&zm&y-Rj M `0        assertEquals(null,card);51Testing软件测试网t1V xQ(WA^
  }
a_up`4b:Kn0测试getCards方法testGetCards1测试用例判断返回长度是否正确;
+~c;@7^"M~/~ F0  public void testGetCards1() throws Throwable {51Testing软件测试网&S W#~(f WfP*O4}B9V
        Deck deck=new Deck();
+L5PN3Us4CAJ J0        deck.addDeck(1);51Testing软件测试网MW-}[*Pg&Zt
        Vector deckcard=deck.getCards();               
l1u t+bX0        assertEquals(52,deckcard.size());51Testing软件测试网?(T1hUM
  }51Testing软件测试网f1Id#d#hF)p
testGetCards2测试用例从返回的结果中取任意值判断内容是否正确;51Testing软件测试网x3OB_0BGE
  public void testGetCards2() throws Throwable {
*D,J)uv d&B%r0        Deck deck=new Deck();
|"DS%I!rQV Y4C0        deck.addDeck(1);51Testing软件测试网!gK/|vkL
        Vector deckcard=deck.getCards();
FaRB7\ Y!rZ0        Card card=(Card) deckcard.elementAt(1);51Testing软件测试网a#~B2Wu
        String RET=card.toString();51Testing软件测试网_ |6_,k{5?r(y)N
        assertEquals("2H",RET);51Testing软件测试网1_Z&b3l ]*Aa
  }51Testing软件测试网+^.B n a*cf$P/X
测试shuffle方法testShuffle1用例测试在未增加牌时shuffle方法是否会出错;51Testing软件测试网c5Ol9W7X TDm_ w
  public void testShuffle1() throws Throwable {
3YkOG'oC0        Deck deck=new Deck();51Testing软件测试网]4h6N.x+IA4G
        deck.shuffle();51Testing软件测试网I [NK_
        Vector RET=deck.getCards();
'V)[5R:M-Y X'G+M,Hx9E0        assertEquals(0, RET.size());51Testing软件测试网.G7r3\u(r:PI
  }51Testing软件测试网Z } `Uji
testShuffle2用例测试洗牌后纸牌的内容有没有丢失或改变;代码中使用了穷举的方法,验证每一张牌是否真实存在。是否有更好的测试方法呢?51Testing软件测试网U:zaj2}W*@*B
  public void testShuffle2() throws Throwable {51Testing软件测试网 UipD{y U.Erb
        Deck deck=new Deck();
J0{l;T6_/Z^a@0        Deck deck2=new Deck();51Testing软件测试网xm0_'J7c4Ir
        deck.addDeck( 1);
i)@1g}V yq0        deck2.addDeck( 1);
5pO Ny KR+a0tW8a0        Vector carddeck= deck.getCards();
2uK3y)b$Q;d0        Vector carddeck2= deck2.getCards();
t f#j4q(@3aI fN0        deck.shuffle();51Testing软件测试网C,}N(^M:~
        Card card,card2;51Testing软件测试网[1xR#R)N2|P8Y1t
        boolean RET;51Testing软件测试网b-AF9W,m.wL2_4p
        for(int j=0;j<52;j++){
~G2Oa6Jw$}5v| W0                  card=(Card) carddeck.elementAt( j);
;lbq3Hu"D#R0                  RET=false;51Testing软件测试网^~'_.q'_
                  for(int i=0;i<52;i++){
?F,Im Ar:z0                        card2=(Card) carddeck2.elementAt(i);
_.yfZP;_0                        if(card2.toString().equals( card.toString()))51Testing软件测试网(V"R|2W.]Zl4xa
                                 RET=true;51Testing软件测试网({a(e@%Uv]o
                  }
1]6A#BRg{O3]0                  assertEquals(true,RET);51Testing软件测试网1Bl-k#vml3_
          }
n6IKST]tr0  }51Testing软件测试网?m%^0LB%Xc3rP{
testShuffle3用例测试洗牌后牌的数量是否错误。51Testing软件测试网:|!DD"H{ WiX
  public void testShuffle3() throws Throwable {
Y!`_6~H?/J M"@o0        Deck deck=new Deck();51Testing软件测试网t+Tbto*|Z
        deck.addDeck( 1);51Testing软件测试网aZ.A,R"GXD
        deck.shuffle();
Y^Y8` sP:l0        Vector RET=deck.getCards();51Testing软件测试网c*r2Z.PIh
        assertEquals(52, RET.size());51Testing软件测试网7UJT,sh2^w ~h[Q
  }51Testing软件测试网L[+q:}&}!s(H
注:由于在源代码中已经注明只使用一幅牌,所以测试过程中未考虑牌多于一幅的情况;51Testing软件测试网"x!Nd zWv k5U4M
思考问题:·         是否考虑异常情况?在本次的例子中,当不增加纸牌而取某一张牌时会出现错误,但是否有必要进行这种测试?51Testing软件测试网#Hf$^|.A+f6pKa
·         getCard方法中如果测试者不知道Card类如何使用,那么将无法对测试结果进行判断。当设计文档编写的不够细致时会不会对白盒测试阻碍,这个阻碍会有多大呢?51Testing软件测试网qhJnP%E3K%N]%{S
·         测试shuffle方法是否有更好的方法呢?类似这种情况在实际应用中可能会很多,有时可能无法使用穷举、边界值、分类等方法来进行测试,这时应该如何进行测试呢?
]-j\'I!ZV#n0Th0·         由于测试代码的增多,提高了错误存在于测试代码中的风险,这时应该如何处理呢?
P%M9nq o(P_1?.JX0·         考虑testBurnIt1测试,当toString方法改变时,可能会引起testBurnIt1测试失败,这样会增加测试代码的维护难度,应该如何解决这一问题呢?

TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar