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

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

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

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

fTl:I.g-_f0        持久化输出方法

         public void persistOut(Object obj, IPersistOut persistout,51Testing软件测试网d.h'Z3^(slj}G
        IAuxiliaryDataManager auxdatamanager)
51Testing软件测试网#}sSOR%^%dv

51Testing软件测试网C G W \"E9J

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

51Testing软件测试网,H;kR-HX r4[

        以MyPoint为例,下面的代码段将MyPoint的属性x,y依次记录到磁盘上:

N&sx%po:Y0

3[ k;lW%ij ZM0        以下是代码片段:

         public void persistOut(Object obj, IPersistOut persistout,51Testing软件测试网5iW#KZ1k&@R
        IAuxiliaryDataManager auxdatamanager)51Testing软件测试网ce1D,~ KD
        {51Testing软件测试网5LU}K^G8fhs%J*kx
            if (obj instanceof MyPoint)51Testing软件测试网(`)g@*K @ ]8u3}
            {51Testing软件测试网V9{ki+tG X4V
                MyPoint point = (MyPoint)obj;
!IK0XQ1O.X(a0                // persistout是负责写的接口,51Testing软件测试网3ut F$qlE|D0N(Y
                //write方法接受的第一个参数是要写入的属性的名称51Testing软件测试网9f7tUU G9Xr
                //第二个参数是要写入的属性值
JCEbFgzM H7v.Y0                persistout.write("X", point.getX());
'Hk6{)F#kJA0                persistout.write("Y", point.getY());51Testing软件测试网D.s:P7htEaI
            }
R ~tSf Qj m0        }
51Testing软件测试网k'`B7FtM#oS

51Testing软件测试网c8t8g U"o*j A;P8iU

        对于测试开发人员来说,这里写入了哪些属性,将来哪些属性才能够被恢复出来。51Testing软件测试网O ~6R/]/o1H

%eCl(A l3b ^ ^!V0        持久化恢复方法51Testing软件测试网P(uH4xr*Eh

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

         public Object persistIn(IPersistIn persistin, IAuxiliaryDataManager auxdatamanager)
WUW5B;G'f$A{yO&Wg0        {51Testing软件测试网6z6C5e0QS6o(~*^
            // 在persistOut方法中,是按照x,y的先后顺序写入磁盘的,
M[ XtA_0            // 那么在该方法中就需要按照x,y的顺序将其读取出来read的参数就是写入磁盘的序号。
L8rn7w Em9x3eW0            int x = ((Integer)persistin.read(0)).intValue();51Testing软件测试网"e+L [#dw(m
            int y = ((Integer)persistin.read(1)).intValue();51Testing软件测试网qH+\!tw8E
            return new MyPoint(x, y);
e9O!QY#Vhr M0        }
51Testing软件测试网3|s.a_{&V,y

2co4| z'\\oP1U0        方法二的实现如下:

         public Object persistIn(IPersistInNamed persistinnamed, IAuxiliaryDataManager auxdatamanager)51Testing软件测试网aYbuLzW7T
        {
,B0^+_6M5n K A`0            // 该方法根据persistOut时写入的属性名称读取属性,read的参数是属性名称
JCe+j-k)y0            int x = ((Integer)persistinnamed.read("X")).intValue();
HcI0MQ)OEA0            int y = ((Integer)persistinnamed.read("Y")).intValue();
gS:h9Pd$G0            return new MyPoint(x, y);51Testing软件测试网+vB(x?&c$\
        }

3K&h#I?:N0n;Q0

ht ht)e*h+_g0        比较方法51Testing软件测试网5C3yV\,XOdp#\

51Testing软件测试网9]"y+M#\ QW

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

Yb%{eJ?}\%v3I051Testing软件测试网 I7{b(K6|7C

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

+?P$r']3pA |i0        以MyPointValue为例,其比较原则是,如果二者相等则返回100(表示不同),否则返回0(表示相同)。

         public int compare(Object obj1, Object obj2, ICompareValueClass comparedvalueclass)51Testing软件测试网0j/r-N w"yQV}
        {
i-uBv1?~)zO0            if ((obj1 instanceof MyPoint) && (obj2 instanceof MyPoint))
K.sXF%T0            {51Testing软件测试网~2Z1P:T8WI-V
                MyPoint point1 = (MyPoint)obj1;
FbW!`z9G2A;kAO4L0                MyPoint point2 = (MyPoint)obj2;
$cjH{+UTOf'nO.G0                return (point1.getX()==point2.getX() && point1.getY()==point2.getY()) ? 100 : 0;51Testing软件测试网(}9S dOA%dv
            }
Zc:J kN$e-@k5r0            else
Q5^U7XL i lh0            {51Testing软件测试网(Ue%F0?#y%Mm
                return 0;
h9p6JH2ESEX'B0            }
*M/MmgM/\5N:o0        }
51Testing软件测试网Z,JLc"M'zdFl6@;M

转载http://softtest.chinaitlab.com/bug/755952_3.html

TAG: Rational

 

评分:0

我来说两句

Open Toolbar