为祖国软件测试事业添砖加瓦!

关于驱动模块!(偶然发现的好东东!)

上一篇 / 下一篇  2007-07-19 19:41:11

这两天学习Nunit,结果让我偶然发现了以前一个好帖子!崇拜一下那个叫“天网”的!
 
驱动模块主要完成以下事情:51Testing软件测试网1^c2k^W!Y'M)A
1、接受测试输入;
:WCzt"Da`:\`f02、对输入进行判断;
(BO Dnx Xz5?03、将输入传给被测单元,驱动被测单元执行;51Testing软件测试网c'lp?\Y&D4Gz
4、接受被测单元执行结果,并对结果进行判断;51Testing软件测试网e$eb/K4^&GV Cs8W
5、将判断结果作为用例执行结果输出测试报告。51Testing软件测试网7y%@2X7sbP Y_y
51Testing软件测试网0^lYQ6z
被测单元用什么语言,驱动就用什么语言写。
s3vD.Trd6y0
y(r$|@5v\0总而言之,写驱动和桩不需要太高深编程知识。如果有模板或框架作为参考的话,差不多就成了一个体力活。
 
一个简单例子:
2o0_(|n"`l051Testing软件测试网d+D+Oo4sP#K
/*被测程序*/51Testing软件测试网q K\suv-I
int Fun(int in)
R9W/d6ipVo~I0{51Testing软件测试网3Sz"k WuLw
    if (in >= 0)
1u w*LX2Y"{iy}0    {51Testing软件测试网.YpW4h)HOUr5i!v
        return 1;51Testing软件测试网5_0x r4?6y,X/Z
    }
O)Ywp)o0    else51Testing软件测试网 {7M;[` d&o
    {51Testing软件测试网J)j)f-wf(r]Z
        return -1;51Testing软件测试网nls(\gv4JS
    }
L'Uq wC0\Y*sJ0}
~,U.U_;bq(\0
`#ej#K DW0
"^ kV4_b'mg051Testing软件测试网 ed\4V7@6EQ
那么通过TCL进行扩展指令编写时,针对该被测函数,驱动如下:51Testing软件测试网 Q Z8g/ywE2}jYT;U
51Testing软件测试网4W6b` h&e{0E)Nm
/*用户自己扩展的用户指令,用来驱动被测函数*/51Testing软件测试网3gKg&zO:] u)g w6t
int Ex_TestFun(ClientData clientData,Tcl_Interp * interp,int argc,  char* argv[])
m+]CMu6a Gcz0{
+Rvo@k0     int i;
(zg4L:`6z ["C,s"{0     int ret,iExceptedRet;51Testing软件测试网~%B3r#M${:J"e]nR

-BqD#@,PJ*| }0    //打开测试结果记录文件
!y,k(Vc5{{)r*E0    FILE * out;51Testing软件测试网VU8~oc
    ōut = fopen("D:\\result.txt","a");51Testing软件测试网 JX%W8bO
                     51Testing软件测试网Y.L~I)E3i,Cp
    //第一步:检查用户输入参数个数是否正确51Testing软件测试网 { h \5@_(b| r ]
    if (3 != argc)
@`9G'wYmI0    {
A,jk Db0        fputs("Parameters error",out);
L(|$\*~?0        fflush(out);
wZp}c#ie0                return TCL_ERROR;51Testing软件测试网,I*Fj#aF"h+c%eq
    }51Testing软件测试网6Z n4J$n%L n6I
   
+z8Ed2{s!f$OC({O#?0   //第二步:取出用户输入参数51Testing软件测试网Q_,mG @4k.O*p;L
    if (TCL_OK != Tcl_GetInt(interp,argv[1],&i))51Testing软件测试网vto#R!~)HFU
   {51Testing软件测试网DY7v!AJ&m.M x1c
              return TCL_ERROR;            
r|6irjdT#P5\H0   }51Testing软件测试网.e0|]+B`v;u

*E{bR,W+N8aJ0   if (TCL_OK != Tcl_GetInt(interp,argv[2],&iExceptedRet))
bZ,EY:v0`0   {51Testing软件测试网5f(\dZ }o'R
        return TCL_ERROR;51Testing软件测试网ktU+Z%w;a+_
   }51Testing软件测试网7d }N5C(b$C
51Testing软件测试网M}L~_5H4z^

;ew['AO0   //第三步:将参数传递给被测函数
;\1b8|Z.p0   ret = Fun(i);
&q8j']Z3S0
@1ed4^,k7{r0   //第四步:将被测函数执行结果和输入的期望结果进行比较,根据比较结果作为用例执行结果输出到测试报告中51Testing软件测试网 [*Q,i2w#~7ISY;O7F%U
  if (ret != iExceptedRet)
vO~GN0   {51Testing软件测试网O+M d$SQ m
        fputs("test fail",out);
[l b i4H;|;nNd0        fflush(out);
CD)Ti$s0   }
x$jE@&A6Hr to0   else51Testing软件测试网 T2n#e%w%xOo
   {
&OaP dX/L0        fputs("test success",out);51Testing软件测试网K} hy` w!]l(z#^
        fflush(out);
G Z2Y~&c0   }
*n4Y)W"ef&N W0
lQ/UhL+};H3R0   return TCL_OK;
t*r$m2r eX0}
 
 
网友提问:
比如说,该如何测试下面一个函数:51Testing软件测试网 ]@;t6T p#Ng

3T)j1Ul7\G:}.f0public void Fun(int in){
TRZ6d#d0System.out.println("This is fun() method.");51Testing软件测试网0tOV gp^
}51Testing软件测试网aWz Lcuu

.V0S:Y,D%Z|w\-~0或者
1mN&I{)~{j0
R6O2F s A+X,E2k0public void Fun(int in){
7~)p_`/ZX[0throw new Exception("Exception occured");51Testing软件测试网TL x%j P
}51Testing软件测试网;w+w^*Z$] }Z3f
51Testing软件测试网&i;Fn!G&f/~
我最近一直在想类似于这种返回值是void的method该如何测,但是毫无办法。因为函数本身没有返回值,就无法确定期望值,这样给测试带来了一定的难度。
c4o F0[%G,O|:^_ G8\051Testing软件测试网0K N5zHaU(E9A2Pg
我是测试新手,不知道用什么方法可以解决,希望高手能帮一把。
 
天网回答:
呵呵,这是一个好问题。51Testing软件测试网&A{+raw#Cg&Tif
单元测试是测试在单元内走不同路径时其功能是否实现,那么单元的功能是否实现是我们需要关注的。前面解释的是验证返回值是否和期望一致,对于被测单元的调用函数来讲,也许关注该返回值就行了。51Testing软件测试网Q f5lc;mBHbT
但在lhtia的问题中,没有返回值,那么这里关注的功能实现结果肯定不是返回值了,具体关注什么需要根据具体单元功能而定,例如单元实现是为了改变某些全局变量,从而影响软件其他部分,那么验证期望结果时是需要验证该全局变量是否和期望值一致;又例如单元实现的功能是向其他单元发送消息,那么单元测试时需要在驱动模块创建接受消息函数,用来接受被测单元发送的消息,从而验证是否实现了预期功能。
`dvV.w0
*qB*\AaS#c;B"F0希望上面解释能回答这个问题。
 
看了这个帖子,也解了我的迷惑,好帖子啊~~

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 12812
  • 日志数: 19
  • 建立时间: 2007-07-18
  • 更新时间: 2011-08-09

RSS订阅

Open Toolbar