一次简单的集成测试测试Card类,Card类需要使用Suit类和Cfg类,这两个类在这之前已经完成了测试。在这一步需要将三者集成在一起进行测试。在测试Card类时将不再考虑对Suti和Cfg类的测试,而仅仅是考虑Card类本身的测试,针对Card类的每一个方法进行测试。
使用Jtest自动生成测试代码,查看测试代码后发现,仅自动生成了部分测试代码,并且没有根据需要输入适合的值,我们需要手工完成部分测试代码。
从最复杂的一个方法开始入手。(当时我从最复杂的方法入手是因为有部分技术问题需要解决);getIcon方法返回某张纸牌所对应的图片文件,这里需要使用Cfg类,过程是根据牌的花色和分值计算出所对应的数组位置,因为返回的结果是一个Image类,所以在对比测试结果时有一些难度,而该数组并没有进行初始化,所以对比时不管测试结果如何对比的结果总是正确的。对此先对Cfg中的数组cardIcons进行初始化,这里仅始化正确结果的数组,最后进行与预期结果进行对比;代码示例如下:Card card; //建立card类Suit suit; //建立suit类suit=Suit.CLUB; //suit引用card=new Card(suit,'A'); //初始化card类int ER=1; //预期位置是数组1 byte buffer[] = new byte[ER];Cfg.cardIcons[ER]= Toolkit.getDefaultToolkit()。createImage(buffer);; //初始化数组1 Image RETVAL=card.getIcon();assertEquals(Cfg.cardIcons[ER],RETVAL); //对比测试结果注:如果不对Cfg中的数组进行初始化,则对比结果永远是正确的。
接下来对每一个方法进行测试,这些方法可以分为几类。
构造方法:。 Card()。 Card(final Card card)。 Card(Suit suit, char value)
赋值的方法:。 void assign (final Card rhs)。 boolean setSuit(Suit newSuit)。 boolean setType(char newType)
取值的方法。 char cardType()。 Suit getSuit()。 String toString()
有效性判断。 final boolean isAce()。 final boolean isFaceCard()。 final boolean isValid()。 final boolean isValueCard()
运算。 boolean equals (Object obj)。 boolean lessThan(Card rhs)。 char suitAsChar()。 Image getIcon()
在这里发现当对某一个方法进行测试时可能会调用另一个方法。或者是在测试过程中需要借用另外的方法。那么这些方法本身是否有一个测试的先后顺序呢?例如:getIcon方法中调用了suitAsChar、isAce、isValueCard三个方法,先测试这三个方法是否正确,再测试getIcon方法是否正确,这样当getIcon方法出现错误时,可以确认是由于getIcon方法本身的错误还是由于suitAsChar、isAce、isValueCard三个方法中出现了错误。

