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

7. StandardDealerHand类测试

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

7. StandardDealerHand类测试51Testing软件测试网5Y"}] oB0l
51Testing软件测试网$XEq9l\ V
第七步:StandardDealerHand类测试StandardDealerHand类继承StandardBlackJackHand类,并完成了部分BlackJackHand部分,及对部分StandardBlackJackHand类的方法实现了重载。51Testing软件测试网M rJ] s] } H
在对StandardDealerHand类测试过程中考虑到了另外一个问题,一般开发过程中一个Java类方法的代码平均在400行左右(该数据来源于对公司内部开发人员的调查),在对400行的代码进行条件覆盖时需要对代码有一定的了解,这对白盒测试的实施有一定的难度,并且对白盒测试的实施进度也有一定的影响。
h"njjiB^A0考虑采用新的测试策略,先保证代码覆盖,然后在代码覆盖的前提下根据功能设计相应的测试用例,这时将测试对象按黑盒处理。这个策略与第六步的策略刚好相反,在第六步当时考虑的策略是在熟悉代码的前提下设计测试,而在这一步则不需要熟悉代码只需要考虑实现的功能。51Testing软件测试网]wdz?!S.`&`s}9V
这两种策略各有优缺点,具体实现哪种策略,要根据实际工作情况确定。
-h4pf sz av0例:takeTurn方法用来得到走法,当小于17分时返回结果为要牌,1721分之间为停牌,大于21分为爆牌。对此考虑4种情况:
M1@\ s+AhpE6r"E0·         小于17分,设置测试值16分;51Testing软件测试网 V |k6o_!E T1i
·         等于17分,设置测试值17分;51Testing软件测试网c8Q6D0H*S)pNK
·         等于21分,设置测试值21分;
w8n]y_#w0·         大于21分,设置测试值22分;
@L8t7r}K0对以上四种情况分别设计测试用例,然后执行测试,分析takeTurn方法代码覆盖率,如果仍然有代码未覆盖则添加相应的测试用例。51Testing软件测试网mlf#Jz A
  public void testTakeTurn1() throws Throwable {
9nTs es0        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网2@ An#s|*T^H
        Card card;
$EGm:B*|(KRM0        card=new Card(Suit.CLUB,'7');51Testing软件测试网@$Y&Y E wI(Dp
        THIS.addCard( card);51Testing软件测试网 QF/f3S:H,Ci
        card=new Card(Suit.CLUB,'T');
6sw'o Ri+~u0        THIS.addCard( card);
K6l+RAi+T*Y3aP0        TurnResult RET=THIS.takeTurn();51Testing软件测试网)Wdew"Teo$tt
        assertSame(TurnResult.STAND,RET);
Nb C!f@k,}9^9z0  }51Testing软件测试网c6y-e"Gl }
  public void testTakeTurn2() throws Throwable {
O7Z1a'c3g/{#q N0        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网 mO{9k`1~
        Card card;
6s~#Y8LRb$G0        card=new Card(Suit.CLUB,'6');51Testing软件测试网-Y0lWw!KK{+zv$q%\
        THIS.addCard( card);
+jYpW G)G0        card=new Card(Suit.CLUB,'T');51Testing软件测试网+U B:d|5i,~ s2L?%l \N
        THIS.addCard( card);51Testing软件测试网+}bAAo.V2B
        TurnResult RET=THIS.takeTurn();
.t ?zp\0O Qd0        assertSame(TurnResult.HIT,RET);
FY/gw4y7~-[N:M0  }
&Ax?-b4XGO+N/k0  public void testTakeTurn3() throws Throwable {51Testing软件测试网J1K T L2T5H-q5YP
        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网 P$T,a\lFV]
        Card card;51Testing软件测试网^#sN)`.`.n _?[
        card=new Card(Suit.CLUB,'Q');
hY a q)xDsN0        THIS.addCard( card);
;K.au%?;?4u'Yh)Q0        card=new Card(Suit.CLUB,'T');51Testing软件测试网v2@3Q5C ^3M:?
        THIS.addCard( card);
O,r#T X%jmc_e0        card=new Card(Suit.CLUB,'J');51Testing软件测试网e5k!T&H'Iqd;I*[
        THIS.addCard( card);
0Mg5L\$t0        TurnResult RET=THIS.takeTurn();
2].ALRS8`,c `D4k0        assertSame(TurnResult.BUST,RET);
V6J+Yhi$N!kM0  }51Testing软件测试网g+Z6Z5?)E%]SK
  public void testTakeTurn4() throws Throwable {51Testing软件测试网0`6B1y1F5Fy
        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网'bS7I&J9C,SK
        Card card;51Testing软件测试网+Wm^:F`#Ug
        card=new Card(Suit.CLUB,'A');51Testing软件测试网l6u#Noo0v
        THIS.addCard( card);
x GM'cE`0        card=new Card(Suit.CLUB,'T');51Testing软件测试网6f5Thd{:R%OX
        THIS.addCard( card);
2B H;te c$j+T+g D0        TurnResult RET=THIS.takeTurn();
8sn(R k'o? [A!KO0        assertSame(TurnResult.STAND,RET);
&D@j\)^k r1{JWEQ0  }
C,Xi]B0g H0draw方法实现的牌的显示功能,考虑到如何用白盒测试的方式实现界面测试,难度较高同时需要写大量的测试代码,当测试代码过于复杂时测试代码本身就有可能产生测试。决定不对draw方法设计白盒测试,而是黑盒测试完成界面的测试。51Testing软件测试网U s1?l2x`|/zn
SimulatedPlayerHand类和PlayerHand测试方法、策略与StandardDealerHand类相同,这里就不做更多的介绍。51Testing软件测试网I6eUm9@:H
思考问题:·         是否有必要对draw方法实现白盒测试呢?
"E&?$DWD Z`9u(~/I2i0·         将代码覆盖与功能测试相结合会出现哪些问题?代码冗余?测试逃逸?

TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar