2013-07-17 29 views
1

映射测试对象通常通过getter方法访问,例如,在RFT中保持映射的TestObject安全吗?

button().click(); 
// Other code 
button().click(); 
// ... 
button().click(); 

是否有任何理由为什么我不应该检索一次TestObject并重用它?例如。

GuiTestObject button = button(); 
button.click(); 
button.click(); 
button.click(); 

或者,换句话说,是没有任何理由RFT产生getter方法,而不是成员变量?

我能想到的唯一可能的原因是为了避免捆绑被测试应用程序的内存,但这对我没有任何意义; Java终结器不可靠,所以我怀疑当TestObject被垃圾收集时,RFT释放任何资源。此外,即使关闭并重新打开应用程序,我仍然可以继续使用同一个映射的TestObject,这表明RFT每次尝试使用它时都会重新查找(并随后取消注册)测试对象。

如果没有缺点,为什么每个引用都只能通过getter方法访问TestObject?例如。 An Object-Oriented framework for IBM RFT,列表2和3

回答

2

我认为,首先其因为

button().click(); 

是清洁剂/简单代码)的用户比..

GuiTestObject button = new GuiTestObject(getMappedTestObject("thebutton"));//This currently resides in the helper file. 
button.click(); 

二,按钮(方法可以通过一个“锚”和一个“旗”也是再次实施的助手类。所以再次

button(anchorobject,flags).click(); 

比有,多了一个按钮对象

GuiTestObject button1 = new GuiTestObject(getMappedTestObject("thebutton"),anchor,flags); 
    button1.click(); 

如果你指的是具有类似简单..

GuiTestObject button = button();//where button() still is in helper class 
button.click(); 
button.dosomthingelse(); 

那么我们就需要指定实际类型的对象的按钮,然后我们有一个用于Text控件和选择的不同TestObject类型和选择树的方法等。 使用这种现有方法,用户可以完全不知道存在不同类型的TestObject(GuiTestObject/TextGuiTestObject/SelectGuiSubitemTestObject)等,这是由对象的getter方法返回的。

我们在脚本中处理的是TestObject,它驻留在播放过程中。 TestObject只是一个规范,用于在应用程序中查找实际对象并为其创建代理(驻留在应用程序进程中),并且此代理是特定操作完成后(例如单击())所释放的代理。然而,TestObject仍然有效,并且正如你所说的那样,如果你重用了testobject,RFT会再次找到该对象。 TestObject将由垃圾收集器处理,并且在需要时,用户可以进一步优化我猜测的代码。 最后要回答你的问题,我不知道使用te​​stobject的缺点是什么。尽管如此,我认为它不会对你的表现有所帮助。 尝试通过使用Object而不是getter来节省多少时间(如果有),请尝试使用静态启用的Java应用程序。

+0

带锚点的重载方法的优点。我没有要求性能的原因;我正在考虑将我的TestObjects组织成简单的容器类,就像我在链接的框架中一样,并且认为使用字段而不是getter方法会更简单。在这种情况下,我也不必知道类,因为我可以在不声明对象类型的变量的情况下执行'container.object.click()'。我只是想知道是否有这样做的内在危险,但它看起来是安全的。谢谢! – Doval