不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           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软件测试网X*D(Sq#GK$]O%B
51Testing软件测试网 K;H(e]0r7m u2E;B
第七步:StandardDealerHand类测试StandardDealerHand类继承StandardBlackJackHand类,并完成了部分BlackJackHand部分,及对部分StandardBlackJackHand类的方法实现了重载。
LhI sH0_Sy]V&p\9b0在对StandardDealerHand类测试过程中考虑到了另外一个问题,一般开发过程中一个Java类方法的代码平均在400行左右(该数据来源于对公司内部开发人员的调查),在对400行的代码进行条件覆盖时需要对代码有一定的了解,这对白盒测试的实施有一定的难度,并且对白盒测试的实施进度也有一定的影响。51Testing软件测试网X0JyiA5?:J&z
考虑采用新的测试策略,先保证代码覆盖,然后在代码覆盖的前提下根据功能设计相应的测试用例,这时将测试对象按黑盒处理。这个策略与第六步的策略刚好相反,在第六步当时考虑的策略是在熟悉代码的前提下设计测试,而在这一步则不需要熟悉代码只需要考虑实现的功能。51Testing软件测试网cskN(x F7T@5Pc
这两种策略各有优缺点,具体实现哪种策略,要根据实际工作情况确定。
$g'P/pOP'K d0例:takeTurn方法用来得到走法,当小于17分时返回结果为要牌,1721分之间为停牌,大于21分为爆牌。对此考虑4种情况:51Testing软件测试网0{c#ut,J } ib$n
·         小于17分,设置测试值16分;51Testing软件测试网[MIGq d5zCjj
·         等于17分,设置测试值17分;
!^2n*x`\2X&x0·         等于21分,设置测试值21分;
0d#P:UA$vL9TU0·         大于21分,设置测试值22分;
j9q3xRnZ|g~0对以上四种情况分别设计测试用例,然后执行测试,分析takeTurn方法代码覆盖率,如果仍然有代码未覆盖则添加相应的测试用例。51Testing软件测试网y3G{'c$@6U|
  public void testTakeTurn1() throws Throwable {51Testing软件测试网:J;AC1aFa
        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网,D2s\|P;K-~iIng
        Card card;51Testing软件测试网+YY/P)@W4Wn@ O
        card=new Card(Suit.CLUB,'7');51Testing软件测试网r)?2S:[Ct E!V5Yu
        THIS.addCard( card);
;\ RRKT0h["?0        card=new Card(Suit.CLUB,'T');51Testing软件测试网R;A0A!sW5|1T/l
        THIS.addCard( card);51Testing软件测试网%PCQ`KbzB
        TurnResult RET=THIS.takeTurn();51Testing软件测试网3}9]8y2r$E'pG
        assertSame(TurnResult.STAND,RET);
.Bxa o [0  }51Testing软件测试网 I z7Ac9EB | d
  public void testTakeTurn2() throws Throwable {51Testing软件测试网e_9Q\"Pj!N
        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网lV8O)V-G#D)b(iS
        Card card;51Testing软件测试网^Me+E9G*t+f\
        card=new Card(Suit.CLUB,'6');
q7g1HW5OjrJ0        THIS.addCard( card);51Testing软件测试网_J8OO"i6e8f;b@8P&D
        card=new Card(Suit.CLUB,'T');51Testing软件测试网YZX&L4T h*u
        THIS.addCard( card);51Testing软件测试网Q(R:CCo/v B^| ~f
        TurnResult RET=THIS.takeTurn();51Testing软件测试网9Fb*F4VM"B
        assertSame(TurnResult.HIT,RET);
-j0E"KZn+i,{0  }
mh(}5j4~ I"T0  public void testTakeTurn3() throws Throwable {
v)K3?"`s0        StandardDealerHand THIS=new StandardDealerHand();51Testing软件测试网S%[S#iM
        Card card;51Testing软件测试网@"c"d7f:F` O)I1iC
        card=new Card(Suit.CLUB,'Q');
Jz^j"z c3?rUI0        THIS.addCard( card);51Testing软件测试网Z z't D4M'jj$Nl
        card=new Card(Suit.CLUB,'T');51Testing软件测试网 \#WCY q
        THIS.addCard( card);51Testing软件测试网:j|8R%^l Y.Pd L#mU
        card=new Card(Suit.CLUB,'J');
E{E sr0        THIS.addCard( card);51Testing软件测试网O G kb'j-^Um!b
        TurnResult RET=THIS.takeTurn();
L;S#@1F"_ H @0        assertSame(TurnResult.BUST,RET);
+Ki U3{x0  }
5[];Xx)S0  public void testTakeTurn4() throws Throwable {
L3\O%v;N9e0        StandardDealerHand THIS=new StandardDealerHand();
}WZ$? ?tO-U"Rxm0        Card card;
:O3ni3g OWFt0        card=new Card(Suit.CLUB,'A');51Testing软件测试网 M.Y9e9[.pH `7IzY MR;b
        THIS.addCard( card);
|B `_ Q0        card=new Card(Suit.CLUB,'T');
6reQU Yz2]0        THIS.addCard( card);51Testing软件测试网1Kkh,C AN8LA
        TurnResult RET=THIS.takeTurn();
p;[)J5M_0        assertSame(TurnResult.STAND,RET);
@0Lv&nK-Z F0  }
1xsb;AR5^0draw方法实现的牌的显示功能,考虑到如何用白盒测试的方式实现界面测试,难度较高同时需要写大量的测试代码,当测试代码过于复杂时测试代码本身就有可能产生测试。决定不对draw方法设计白盒测试,而是黑盒测试完成界面的测试。
1d!V9Ut3{D^e0SimulatedPlayerHand类和PlayerHand测试方法、策略与StandardDealerHand类相同,这里就不做更多的介绍。
0S0Dn/o2hZip0思考问题:·         是否有必要对draw方法实现白盒测试呢?51Testing软件测试网9U/d-y{ @nV5XC
·         将代码覆盖与功能测试相结合会出现哪些问题?代码冗余?测试逃逸?

TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar