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

4. 一次简单的集成测试

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


{ W8yLNsGH3Z051Testing软件测试网.r1f"PE^4X
第四步:一次简单的集成测试测试Card类,Card类需要使用Suit类和Cfg类,这两个类在这之前已经完成了测试。在这一步需要将三者集成在一起进行测试。在测试Card类时将不再考虑对SutiCfg类的测试,而仅仅是考虑Card类本身的测试,针对Card类的每一个方法进行测试。51Testing软件测试网J"I){ wS6}},HZ
使用Jtest自动生成测试代码,查看测试代码后发现,仅自动生成了部分测试代码,并且没有根据需要输入适合的值,我们需要手工完成部分测试代码。51Testing软件测试网2y3s&D#w}1iH
从最复杂的一个方法开始入手。(当时我从最复杂的方法入手是因为有部分技术问题需要解决);getIcon方法返回某张纸牌所对应的图片文件,这里需要使用Cfg类,过程是根据牌的花色和分值计算出所对应的数组位置,因为返回的结果是一个Image类,所以在对比测试结果时有一些难度,而该数组并没有进行初始化,所以对比时不管测试结果如何对比的结果总是正确的。对此先对Cfg中的数组cardIcons进行初始化,这里仅始化正确结果的数组,最后进行与预期结果进行对比;代码示例如下:51Testing软件测试网p6L(P6\@/^
  Card card;              //建立card51Testing软件测试网7P/s#M&H f7dt
  Suit suit;               //建立suit51Testing软件测试网*oC V Q O!^rEq-v?;C;A
  suit=Suit.CLUB;      //suit引用
)q#fW*s@]0  card=new Card(suit,'A');   //初始化card51Testing软件测试网@ n*M v [w5aeH
  int ER=1;                    //预期位置是数组1
6m"a,sm mi VR0  byte buffer[] = new byte[ER];
.` Z2Rdd ek0  Cfg.cardIcons[ER]= Toolkit.getDefaultToolkit().createImage(buffer);;      //初始化数组1
K5A;o:bJt1c0  Image RETVAL=card.getIcon();
2xE x?1q/[-L"?nP0  assertEquals(Cfg.cardIcons[ER],RETVAL);   //对比测试结果51Testing软件测试网)dt J(Jv1F
注:如果不对Cfg中的数组进行初始化,则对比结果永远是正确的。51Testing软件测试网;Jj7n1L-` \%M |X.s
接下来对每一个方法进行测试,这些方法可以分为几类。51Testing软件测试网lj0E1ar*m-R)v
构造方法:
j`"I%j!J zp7o0·         Card()
G)q.K8QM+n6J0·         Card(final Card card)
?hXiSAmY0·         Card(Suit suit, char value)51Testing软件测试网3\6` `:kx.r4a
赋值的方法:51Testing软件测试网Q ~~9cpOQ'A,c
·         void  assign (final Card rhs)
|p q(aB%Q\0·         boolean setSuit(Suit newSuit)51Testing软件测试网7h/j1^B;V8L1bG7e
·         boolean setType(char newType)51Testing软件测试网n Ii!P6w[-Sh
取值的方法
zW#_7^g3YXD0·         char cardType()  
,zv C0l^u0·         Suit getSuit()51Testing软件测试网Y2w2h7e%An
·         String toString()51Testing软件测试网.L }~6[jCM
有效性判断51Testing软件测试网%y? _7L1}V_G
·         final boolean isAce()51Testing软件测试网+Xrxe @0HZj
·         final boolean isFaceCard()
$V:W^bA y&fq0·         final boolean isValid()
$`"j/JIl@W0·         final boolean isValueCard()
*r(a H3tZFW0运算51Testing软件测试网&J;JP vt \
·         boolean equals (Object obj)
qOavv6^0·         boolean lessThan(Card rhs)
p4T ^ic7{A-X0·         char suitAsChar()
Yc+V6K,g$F:l0·         Image getIcon()
gMXx$B2zo mb0在这里发现当对某一个方法进行测试时可能会调用另一个方法。或者是在测试过程中需要借用另外的方法。那么这些方法本身是否有一个测试的先后顺序呢?例如:
Q;|8OUTme:M3zC0getIcon方法中调用了suitAsCharisAceisValueCard三个方法,先测试这三个方法是否正确,再测试getIcon方法是否正确,这样当getIcon方法出现错误时,可以确认是由于getIcon方法本身的错误还是由于suitAsCharisAceisValueCard三个方法中出现了错误。51Testing软件测试网6hw,N!~6p)Oc.e
手工完成每一个类的测试代码。可以使用Juint实现对已经完成的三个类的一次性完整测试。
%fs#lo*Yxn/J W1b0下图例出了使用Juint对三个类进行测试,并且在三个类都有一处错误。
yh?"a/S6M~8v5r D051Testing软件测试网f2nM X:c.QB#C$L_[x
51Testing软件测试网,cO,^C l:zZ
思考问题:·         类中有方法AB测试方法A时已经对B进行了测试,是否还需要对方法B进行单独的测试呢?
/za#tdkP5j0·         suitAsChar方法为例,如果设计文档只说明了返回值,而并没有明确说明在何时才会有该返回值,这时应该如何设计测试用例
9cq L-A,`0Y'dr(A0·         设计说明文档中是否会详细说明方法的执行过程,因为有时是根据执行过程来设计测试用例。例如:getIcon方法,当我们不知道Cfg类中的cardIcons需要初始化时这个测试用例的设计可能就是错误的,因为即使返回的结果与预期不相符,但对比结果仍然是正确的。
%c_/BT+D*Z(Hlw0

TAG: 单元测试

 

评分:0

我来说两句

Open Toolbar