2 .2其他验证自定义类型对象的方法
O
@Y2s h0 在介绍如何实现ValueManager之前,首先让我们来看一下其他的解决办法。
\+S_^0h!`051Testing软件测试网 h_a1FW&E\8ya 第一种方法,我们可以逐一比较自定义类型的属性来验证被测试对象是否符合要求。如下例所示:
MyPoint point = getCenterOfGravity(polygon);51Testing软件测试网by;uZ T3` vpManual("VP_CG1", new Integer(point.getX())).performTest(); P:Yu!i'D$i0 vpManual("VP_CG2", new Integer(point.getY())).performTest(); |
~#fCj1\/w02c4Ds0`1P!L d%CH5@0 使用logTestResult方法也可以达到同样的目的:
MyPoint point = getCenterOfGravity(polygon); AW)b3df3K_+L0 boolean flag = (point.getX() == 6 && point.getY()==8);51Testing软件测试网&}9@9jPo*}
` logTestResult("This is not a VP", flag); |
"~XB+F
jm9|&\|0teJ3[jzn!B0 这两种方式都有其局限性,第一种方式会使验证点的数量增加,特别是当自定义类的属性很多的时候;并且该方法也不利于重用,如果多个脚本都需要验证 MyPoint,则脚本开发的工作会大大增加;第二种方式虽然不增加验证点数目,但是由于logTestResult只记录比较结果,使日志中的信息不足。特别是在测试用例失败的时候,这不利于测试人员定位问题所在。
/{+e+UCp{cD04[;Epd)LU/`-j0 因而,为自定义类型实现ValueManager较以上两种方法更好。
J]3l(ht{w Y051Testing软件测试网wn/r-o Z
51Testing软件测试网(f"L?.R-NU,d W(M 图3 使用ValueManager则可以通过验证点编辑器查看和编辑验证点数据,利于问题定位
S,T'T;_N;B0|5]le4OQF051Testing软件测试网6r+QI
h,Ugc{ 图4 使用logTestResult方法只能记录结果,不能记录数据,信息不足51Testing软件测试网qh b"f+` T r8Ycv Q
$wqW5uu[x0 2.3创建ValueManager51Testing软件测试网B~Wp1x
\+Lo#`?tE ~0 现在,我们准备创建MyPoint的ValueManager--我们命名为MyPointValue了,如上文所述,它是 IManageValueClass接口的一个实现,该接口有7个方法:persistIn, persistInNamed, persistOut, compare, getCanonicalName, getClassName和createValue。这些接口分别完成哪些事情呢?51Testing软件测试网.@Z,Q:P[4t"_
Uyi
51Testing软件测试网Q_9}J%_u 我们再来看看,执行验证点的过程中 ValueManager是怎么工作的。如图1所示,验证点执行过程中必须的步骤可以归为三类:读取数据--从基准线中读取数据;写入数据--将期望数据写入日志,将实际数据写入日志,写入基准线;比较--比较期望数据和实际数据。以上三类动作都需要ValueManager的参与。下面以MyPoint 为例:
(_IMdf3HiKs051Testing软件测试网/t)TB[L? 如图5,在从基准线中读取数据的过程中,如果脚本发现基准线存在,RFT会读取基准线数据。如果RFT在注册了的 ValueManager表中找到了相应的ValueManager--对MyPoint来说,就是找到了MyPointValue--就会创建该 ValueManager的一个实例,然后调用该实例的persistIn方法。persistIn方法包含了如何读取MyPoint内容的逻辑,其返回值就是一个MyPoint对象,这样就将存储在磁盘上XML格式的MyPoint对象恢复出来,供RFT继续使用了。
K Oe,URt\!?z051Testing软件测试网`:rZ0SQ6o 图5 从基准线中读取数据
IR(gU;f8n4f^051Testing软件测试网n9o(Vp[/g0o4j
51Testing软件测试网8@ss0B!IQZ 如图6,在写入数据的过程中,无论是写入期望数据,写入实际数据还是写基准线,都是通过persistOut方法完成的。同样的,RFT首先找到 MyPoint的ValueManger,将其实例化,然后调用MyPointValue的persistOut方法将其写入磁盘。
r1LB2[9A
kn051Testing软件测试网 j9~%s%V
rLOV 图6 写入基准线
`
Fl$zI6Qo051Testing软件测试网!nM x`)s\#Y
Q(n)S9W{!ai;y2t0 如图7,在比较两个MyPoint对象的时候,RFT还是先找到MyPoint的ValueManger,将其实例化,然后调用MyPointValue的compare方法,得到一个分值,根据分值和用户设置判断期望数据和实际数据是否一致。51Testing软件测试网,J K Md,u2E
c!S ^R
2Ucp'C*Lyn9W3d0 图7 比较期望数据与实际数据51Testing软件测试网+p,v0J0AP
h]9V
m`'{f8u t7S0转载于http://softtest.chinaitlab.com/bug/755952_2.html
}LcC/[.kH
X0