最新发表文章

第七步:StandardDealerHand类测试
作者: alanstone   发表日期: 2005-12-27 20:42   复制链接


第七步:StandardDealerHand类测试

StandardDealerHand类继承StandardBlackJackHand类,并完成了部分BlackJackHand部分,及对部分StandardBlackJackHand类的方法实现了重载。

在对StandardDealerHand类测试过程中考虑到了另外一个问题,一般开发过程中一个Java类方法的代码平均在400行左右(该数据来源于对公司内部开发人员的调查),在对400行的代码进行条件覆盖时需要对代码有一定的了解,这对白盒测试的实施有一定的难度,并且对白盒测试的实施进度也有一定的影响。

考虑采用新的测试策略,先保证代码覆盖,然后在代码覆盖的前提下根据功能设计相应的测试用例,这时将测试对象按黑盒处理。这个策略与第六步的策略刚好相反,在第六步当时考虑的策略是在熟悉代码的前提下设计测试,而在这一步则不需要熟悉代码只需要考虑实现的功能。

这两种策略各有优缺点,具体实现哪种策略,要根据实际工作情况确定。

例:takeTurn方法用来得到走法,当小于17分时返回结果为要牌,1721分之间为停牌,大于21分为爆牌。对此考虑4种情况:

·         小于17分,设置测试值16分;

·         等于17分,设置测试值17分;

·         等于21分,设置测试值21分;

·         大于21分,设置测试值22分;

对以上四种情况分别设计测试用例,然后执行测试,分析takeTurn方法代码覆盖率,如果仍然有代码未覆盖则添加相应的测试用例。

  public void testTakeTurn1() throws Throwable {

        StandardDealerHand THIS=new StandardDealerHand();

        Card card;

        card=new Card(Suit.CLUB,'7');

        THIS.addCard( card);

        card=new Card(Suit.CLUB,'T');

        THIS.addCard( card);

        TurnResult RET=THIS.takeTurn();

        assertSame(TurnResult.STAND,RET);

  }

  public void testTakeTurn2() throws Throwable {

        StandardDealerHand THIS=new StandardDealerHand();

        Card card;

        card=new Card(Suit.CLUB,'6');

        THIS.addCard( card);

        card=new Card(Suit.CLUB,'T');

        THIS.addCard( card);

        TurnResult RET=THIS.takeTurn();

        assertSame(TurnResult.HIT,RET);

  }

  public void testTakeTurn3() throws Throwable {

        StandardDealerHand THIS=new StandardDealerHand();

        Card card;

        card=new Card(Suit.CLUB,'Q');

        THIS.addCard( card);

        card=new Card(Suit.CLUB,'T');

        THIS.addCard( card);

        card=new Card(Suit.CLUB,'J');

        THIS.addCard( card);

        TurnResult RET=THIS.takeTurn();

        assertSame(TurnResult.BUST,RET);

  }

  public void testTakeTurn4() throws Throwable {

        StandardDealerHand THIS=new StandardDealerHand();

        Card card;

        card=new Card(Suit.CLUB,'A');

        THIS.addCard( card);

        card=new Card(Suit.CLUB,'T');

        THIS.addCard( card);

        TurnResult RET=THIS.takeTurn();

        assertSame(TurnResult.STAND,RET);

  }

draw方法实现的牌的显示功能,考虑到如何用白盒测试的方式实现界面测试,难度较高同时需要写大量的测试代码,当测试代码过于复杂时测试代码本身就有可能产生测试。决定不对draw方法设计白盒测试,而是黑盒测试完成界面的测试。

SimulatedPlayerHand类和PlayerHand类测试方法、策略与StandardDealerHand类相同,这里就不做更多的介绍。

 

思考问题:

·         是否有必要对draw方法实现白盒测试呢?

·         将代码覆盖与功能测试相结合会出现哪些问题?代码冗余?测试逃逸?


阅读全文(19185) | 回复(1514) | 推送
欢迎到 alanstone 的个人主页看更多内容



<<   1   2   3   4   5  >>  Pages: ( 1/101 total )   共1514条回复
  <<   1   2   3   4   5  >>  Pages: ( 1/101 total )