繁体   English   中英

测试用Java Swing编码的应用程序GUI:最佳方法?

[英]Test an application GUI coded with Java Swing : best approach?

我必须自动为Java“绘图”应用程序GUI(如ArgoUML / LaTeXDraw / etc)生成测试。 我需要验证经过测试的应用程序的行为是否正确。 在给定的示例中,我需要检查“撤消/重做”按钮是否工作正常=“撤消”将画布置于前移状态,而“重做”又将其置于以前的状态。

我已经对如何解决这个问题有了一个想法,但是我希望有经验的人给予反馈:

  • 我应该使用Robot类来模拟GUI上的输入吗? 还是有更简单的方法?
  • 我需要捕获程序的状态以供以后分析,以查看程序的状态是否一致,是否应该对窗口进行屏幕截图或是否有办法遍历所有JFrame的组件并捕获其属性(它应该包含画布)州)?

  • 更重要的是,我不知道如何在界面上找到每个按钮。 告诉机器人给定的按钮在窗口中的某个(x,y)位置的最简单方法是什么? 我应该在按钮的.jpeg版本中搜索像素吗? 我是否应该手动在界面上找到每个按钮(即为每个包含x,y属性的按钮创建一个类)?

  • 最后,我从未将机器人绑定到给定程序。 我可以只加载要测试的软件的.jar文件,并告诉Robot在该窗口上运行吗? 还是我需要处理原始项目中的所有源文件?

谢谢您的宝贵时间,如果我的问题中的任何部分似乎不够清楚,请告诉我,我会尽力更清楚地解释一下。

附言:关于我需要做的工作的任何建议都欢迎:)

我已经完成了您在其他答案的评论中解释的内容。

Robot可以在过程的各个部分使用,但取决于编写方式,遵循最佳测试实践的愿望以及总体需求,它可能会很快受到限制。 如果您未编写代码或最佳编码实践使您无法访问或直接测试应用程序的各个方面,则需要采取其他方法。

根据我的经验,我使用反射来测试实际状态(例如各种组件的文本值),从而在主要入口点建立隧道。 Robot仅对我执行关键事件有用。

最终,答案取决于许多因素:

  1. 机器人? -当然,请根据需要使用它。
  2. 在满足要求的同时做最简单的事情。 如果可以截屏,请执行此操作(使用Robot )。 如果您需要更多信息,则可以获取 JFrameJPanel 的组件并保存提供的属性。
  3. 可以通过调查UI的多种方式来完成此操作。 寻找按钮和做doClick直接就可以了,移动鼠标Robot ,做一个按下鼠标等。
  4. 实例化一个新的Robot ,它将被链接到主设备。 在简单的场景中,仅需要new Robot().keyPress(KeyEvent.VK_ENTER);

考虑到所有这些,存在着诸如陷阱之类的陷阱。 最好开始模拟/测试,不要触摸机器的任何外围设备。 另外,根据某些方法的运行时间,您可能想要Thread.sleep() (我们很遗憾这样做)或使用连接的线程。

您没有添加任何代码,因此我只能猜测:

如果您的代码遵循MV(V)C模式,则无需通过GUI进行测试。 您可以直接测试处理重做/撤消的控制器方法,并验证它们是否正确更改了模型并与撤消/重做堆栈进行通信(这是我的世界中模型的一部分...)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM