Chinaunix首页 | 论坛 | 博客
  • 博客访问: 754860
  • 博文数量: 771
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 14:24
文章分类

全部博文(771)

文章存档

2011年(1)

2008年(770)

我的朋友

分类:

2008-09-11 14:35:01

集成在项目中加入Deck类,使用Jtest自动生测试代码。检查自动生成的测试代码发现有部分没有判断结果。对些需要手工改写测试代码。
测试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方法进行了测试;
 测试burnIt方法public void testBurnIt1() throws Throwable
{
        Deck deck=new
Deck();

   deck.addDeck(1);

   deck.burnIt();

   String RET=deck.toString() ;

   String Exp="Card nums=0 []";

   assertEquals(Exp, RET);
   }
 先增加一幅牌然后调用burnIt方法清除,使用toString方法取得返回结果,对返回结果进行判断。也可以使用getCards方法对测试结果进行判断。个人觉得getCards方法可能更加适合,因为该方法中并没有任何操作,不会对测试产生影响。下面的
[url=javascript:;][u][b]测试方法[/b][/u][/url]
会不会更好一些呢?
   public void
testBurnIt1() throws Throwable {

   Deck deck=new Deck();

   deck.addDeck(1);

   deck.burnIt();

   Vector RET=deck.getCards();

   assertEquals(0, RET.size());
   }
 测试getCard方法testGetCard1测试使用取边界值与预期值进行比较判断测试正确性的测试策略。下例为取第一个值;
  public void
testGetCard1() throws Throwable {

   Deck deck=new Deck();

   deck.addDeck( 1);

   Card card=deck.getCard();

   Card card2=new Card();

   boolean RET1=card.equals( card2);


   assertEquals(true,RET1);
  }
[color=red]下面的例子中,测试了[/color]
Deck类的异常情况;在测试过程中测试出现异常(不是错误)。对于这个例子我们是否需要考虑这种特殊情况呢?在

  [NextPage]
[color=red]BJ[/color]
这个项目中会不会出现不增加牌而使用牌的情况呢?对于这种情况是否需要考虑程序的整体架构呢?(这种异常可能会由其他的代码来处理)
  public void
testGetCard3() throws Throwable {

   Deck deck=new Deck();

   Card card = null;

   card=deck.getCard();

   assertEquals(null,card);
  }
 测试getCards方法testGetCards1
[url=javascript:;][u][b]测试用例[/b][/u][/url]
判断返回长度是否正确;
   public void
testGetCards1() throws Throwable {

   Deck deck=new Deck();

   deck.addDeck(1);

   Vector deckcard=deck.getCards();


   assertEquals(52,deckcard.size());
  }
testGetCards2测试用例从返回的结果中取任意值判断内容是否正确;
  public void testGetCards2() throws
Throwable {
         Deck deck=new
Deck();

   deck.addDeck(1);

   Vector deckcard=deck.getCards();


   Card card=(Card)
deckcard.elementAt(1);
        String
RET=card.toString();

   assertEquals("2H",RET);
   }
测试shuffle方法testShuffle1用例测试在未增加牌时shuffle方法是否会出错;
  public void testShuffle1() throws Throwable
{
        Deck deck=new
Deck();

   deck.shuffle();

   Vector RET=deck.getCards();

   assertEquals(0, RET.size());
[color=#3366ff]  }[/color]

 testShuffle2用例测试洗牌后纸牌的内容有没有丢失或改变;代码中使用了穷举的方法,验证每一张牌是否真实存在。是否有更好的测试方法呢?
  public void
testShuffle2() throws Throwable {

   Deck deck=new Deck();

   Deck deck2=new Deck();

   deck.addDeck( 1);

   deck2.addDeck( 1);

   Vector carddeck= deck.getCards();


   Vector carddeck2=
deck2.getCards();

   deck.shuffle();

   Card card,card2;

   boolean RET;
        for(int
j=0;j

       card=(Card) carddeck.elementAt(
j);

 RET=false;

       for(int
i=0;i

             card2=(Card)
carddeck2.elementAt(i);


 if(card2.toString().equals(
card.toString()))


    RET=true;

       }


 assertEquals(true,RET);

}
  }
testShuffle3用例测试洗牌后牌的数量是否错误。
  public void testShuffle3() throws
Throwable {
        Deck deck=new
Deck();
        deck.addDeck(
1);

   deck.shuffle();

   Vector RET=deck.getCards();

   assertEquals(52, RET.size());
   }
 注:由于在源代码中已经注明只使用一幅牌,所以测试过程中未考虑牌多于一幅的情况;
 思考问题:       是否考虑异常情况?在本次的例子中,当不增加纸牌而取某一张牌时会出现错误,但是否有必要进行这种测试?

 在getCard方法中如果测试者不知道Card类如何使用,那么将无法对测试结果进行判断。当设计文档编写的不够细致时会不会对白盒测试阻碍,这个阻碍会有多大呢?

 测试shuffle方法是否有更好的方法呢?类似这种情况在实际应用中可能会很多,有时可能无法使用穷举、边界值、分类等方法来进行测试,这时应该如何进行测试呢?
   [NextPage]
 由于测试代码的增多,提高了错误存在于测试代码中的风险,这时应该如何处理呢?

 考虑testBurnIt1测试,当toString方法改变时,可能会引起testBurnIt1测试失败,这样会增加测试代码的维护难度,应该如何解决这一问题呢?

【责编:michael】

--------------------next---------------------

阅读(432) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~