不谋万世者,不足谋一时;不谋全局者,不足谋一域。君子敏于事而慎于言 新浪微薄:土司阿哈

在RFT中运用手动验证点验证自定义类型对象 (三)

上一篇 / 下一篇  2008-09-18 23:22:52 / 个人分类:Rational

1208328177
  • 自动化测试:
  • 测试文档:
 理解了IManageValueClass接口各方法的作用,我们就可以来实现这个ValueManager--MyPointValue了。如上文所述,有7个方法需要实现。其中最关键的是4个方法:

H-i ^FyecC,w0        持久化输出方法

         public void persistOut(Object obj, IPersistOut persistout,51Testing软件测试网!n9X6@'ouy vg
        IAuxiliaryDataManager auxdatamanager)
51Testing软件测试网uU&{ ? s~7F5J

51Testing软件测试网_i2o4n2g*dV

        该方法通过persistout将对象obj的属性写入到磁盘上。obj就是要写入的对象,persistout是负责写操作的接口,由RFT传入,auxdatamanager是用于命名相关文件的接口,由RFT传入,通常不是使用到这个参数。51Testing软件测试网[$ip)E MoTP

0K&N9O\,pw*U0        以MyPoint为例,下面的代码段将MyPoint的属性x,y依次记录到磁盘上:

khFy-zA{0

;r?+H1oM1z3b0        以下是代码片段:

         public void persistOut(Object obj, IPersistOut persistout,51Testing软件测试网0} Fm La[*Y
        IAuxiliaryDataManager auxdatamanager)51Testing软件测试网n,N^+jO
        {
0EO)Ol$n xI&x0            if (obj instanceof MyPoint)51Testing软件测试网w&Nz)E!rb$f7B
            {51Testing软件测试网+K`,@ d;`!t!e
                MyPoint point = (MyPoint)obj;51Testing软件测试网2tZ;LA;{ek'd r r(y
                // persistout是负责写的接口,
PZ%Hq,v|Tj$G0                //write方法接受的第一个参数是要写入的属性的名称
n4?/N an s0                //第二个参数是要写入的属性值
&|#o n4S$W0                persistout.write("X", point.getX());
6B:d0K0i0Td$`P]0                persistout.write("Y", point.getY());
4Ug:M H#FBL9Rwt3A0            }51Testing软件测试网n)_)}"oZ
        }

Z9Mz U%q051Testing软件测试网 d\ j.D |Pd

        对于测试开发人员来说,这里写入了哪些属性,将来哪些属性才能够被恢复出来。51Testing软件测试网 N*g,i bC/I2w&{t

51Testing软件测试网6rze(~o;Kz k;i2J1Xk/k

        持久化恢复方法

?yzd_L0~1VC/N,q R051Testing软件测试网 zjeh%}4zS.F

        RFT 提供两个方法读入持久化了的对象。一种接受IPersistIn类型的参数,另一种接受IPersistInNamed类型的参数。二者的不同在于,前者是根据对象属性的存储顺序进行读取的,而后者是按照对象的属性名称进行读取。以MyPointValue为例, 方法一的实现如下:

         public Object persistIn(IPersistIn persistin, IAuxiliaryDataManager auxdatamanager)
1j#g2GdsM0        {51Testing软件测试网'z x Q&? Wx@
            // 在persistOut方法中,是按照x,y的先后顺序写入磁盘的,51Testing软件测试网7U^yHv*rt8OLv
            // 那么在该方法中就需要按照x,y的顺序将其读取出来read的参数就是写入磁盘的序号。
q B*iM3GDni0            int x = ((Integer)persistin.read(0)).intValue();
ME]Z T|!y0            int y = ((Integer)persistin.read(1)).intValue();
s]|v,c;z e0            return new MyPoint(x, y);51Testing软件测试网#qd'E"m Pj?x-q L
        }

&\S&|8@!~/E0

%q)l:n+t3{s1st0        方法二的实现如下:

         public Object persistIn(IPersistInNamed persistinnamed, IAuxiliaryDataManager auxdatamanager)
k&xJ'c t m0        {
X.v7Z2Lh(wm1^0            // 该方法根据persistOut时写入的属性名称读取属性,read的参数是属性名称51Testing软件测试网3[$c+ae;M+|
            int x = ((Integer)persistinnamed.read("X")).intValue();
`mRBZe0            int y = ((Integer)persistinnamed.read("Y")).intValue();
^!?d3]1d%x*Mjz0            return new MyPoint(x, y);
&[4Xk3|V:G7v Z0        }

wGx8~%|.Vpd0

L1k/\9T?0Xe0        比较方法51Testing软件测试网}bd5?^:K0U3P

51Testing软件测试网U*kZ.T7gn,R s

        public int compare(Object obj1, Object obj2, ICompareValueClass comparedvalueclass)

9j v D9vD+jr051Testing软件测试网't~TG+S%aS7I.Ur

        compare方法用于确定两个对象一致与否,其前两个参数为要比较的对象,返回值则为一个0-100之间的整数,返回值越大则被比较的对象越相似。51Testing软件测试网){r7?e ?/[H

51Testing软件测试网~%qc;iUc y;g{

        以MyPointValue为例,其比较原则是,如果二者相等则返回100(表示不同),否则返回0(表示相同)。

         public int compare(Object obj1, Object obj2, ICompareValueClass comparedvalueclass)
mT/H+nFw2Kp'z0        {
-P]-[z-D`%V0            if ((obj1 instanceof MyPoint) && (obj2 instanceof MyPoint))
X6A,n X+gj%[!k@xx0            {51Testing软件测试网L)Z"S&J5?
                MyPoint point1 = (MyPoint)obj1;51Testing软件测试网Grv(L NM
                MyPoint point2 = (MyPoint)obj2;51Testing软件测试网B(w3u(A$^d0E
                return (point1.getX()==point2.getX() && point1.getY()==point2.getY()) ? 100 : 0;
I#a6]M4ni0            }51Testing软件测试网/s D vq+dd k
            else
H0a`Kq9sd0            {51Testing软件测试网riHO8N
                return 0;
5eWxlt0            }51Testing软件测试网3g {MGD
        }

9zq-c f4Q/L5k{`g0转载http://softtest.chinaitlab.com/bug/755952_3.html

TAG: Rational

 

评分:0

我来说两句

Open Toolbar