在RFT中保持映射的TestObject是否安全?

时间:2013-07-17 20:27:53

标签: java rft

映射的TestObject通常通过getter方法访问,例如

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

我有什么理由不能一次检索TestObject并重复使用它? E.g。

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

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

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

如果没有缺点,为什么我发现每个引用都只通过getter方法访问TestObjects?例如。 An Object-Oriented framework for IBM RFT,清单2和3。

1 个答案:

答案 0 :(得分:2)

我认为,首先是因为

button().click();  

比用户更简洁/更简单的代码。

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

其次,button()方法可以传递一个“Anchor”和一个“Flag”,它也会再次在Helper类中实现。再次

    button(anchorobject,flags).click();

比拥有一个按钮对象

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

如果你的意思是...... .. / / p>

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

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

我们在脚本中处理的是一个驻留在回放过程中的TestObject。 TestObject只是一个规范,用于在应用程序中查找实际对象并为其创建代理(驻留在应用程序进程中),并且此代理是在特定操作完成后释放的内容(例如,click())。但是,TestObject仍然有效,正如您正确地说,如果重用testobject,RFT将再次找到该对象。垃圾收集器将处理TestObject,并在需要时,用户可以进一步优化该代码。 最后回答你的问题我不知道使用你的测试对象有什么缺点。不过,我认为它在性能方面也不会对你有帮助。 尝试通过使用Object而不是getter来计算它为你节省多少时间,在静态启用的Java应用程序上尝试它。