我必须自动为Java“绘图”应用程序GUI(如ArgoUML / LaTeXDraw / etc)生成测试。我需要验证测试的应用程序是否正常运行。在我给出的示例中,我需要检查撤消/重做按钮是否正常工作=撤消将画布置于前驱状态,重做再次将其置于以前的状态。
我已经知道如何处理这个问题,但我想要有经验的人的反馈:
我需要捕获程序的状态以供以后分析查看 如果程序的状态是一致的,我应该截图 窗口或有没有办法迭代所有的JFrame 组件并捕获它们的属性(它应该包括canvas 状态)?
更重要的是,我不知道如何找到每个按钮 接口。什么是告诉机器人给定的最简单的方法 按钮是否在窗口中的某个(x,y)位置?我应该搜索 按钮的.jpeg版本中的像素?我应该找到每一个 手动界面上的按钮(即为每个按钮创建一个类 包含x,y属性)?
感谢您的时间,如果我的问题的任何部分看起来不够清楚,请告诉我,我会尝试更清楚地解释它。
P.S:欢迎任何有关我需要做的工作的建议:)答案 0 :(得分:1)
Robot
对于流程的各个部分非常有用,但根据其编写方式,遵循最佳测试实践的愿望以及整体需求可能会受到快速限制。如果你没有写它或最好的编码实践让你无法访问或直接测试应用程序的方面,那么其他方法是必要的。
我的经验使我使用反射来测试实际状态(如各种组件的文本值)。 Robot
仅对我的案例有用key events。
最终,答案取决于许多因素:
Robot
)。如果您需要更多信息,可以JFrame
或JPanel
get the components并保存所提供的资产。doClick
,使用Robot
移动鼠标并按下鼠标等等。Robot
时,它将链接到主设备。在new Robot().keyPress(KeyEvent.VK_ENTER);
鉴于这一切,有焦点等陷阱。最好开始模拟/测试,而不是触摸机器的任何外围设备。此外,根据某些方法的运行时间,您可能需要Thread.sleep()
(我们很遗憾地这样做)或使用连接的线程。
答案 1 :(得分:0)
您没有添加任何代码,所以我可以猜测:
如果您的代码遵循MV(V)C模式,则不需要通过GUI进行测试。您可以直接测试处理重做/撤消的控制器方法,并验证它们是否正确地更改模型并与撤消/重做堆栈通信(这是我世界中模型的一部分......)。