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

时间:2017-01-07 16:17:38

标签: java swing user-interface testing

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

我已经知道如何处理这个问题,但我想要有经验的人的反馈:

  • 我应该使用Robot类来模拟GUI上的输入吗?要么 有更简单的方法吗?
  • 我需要捕获程序的状态以供以后分析查看 如果程序的状态是一致的,我应该截图 窗口或有没有办法迭代所有的JFrame 组件并捕获它们的属性(它应该包括canvas 状态)?

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

  • 最后,我从未将机器人“附加”到给定的程序中。能够 我只是加载我要测试的软件的.jar文件并告诉 机器人在那个窗口上操作?或者我需要与所有人一起工作 来自原始项目的源文件?

感谢您的时间,如果我的问题的任何部分看起来不够清楚,请告诉我,我会尝试更清楚地解释它。

P.S:欢迎任何有关我需要做的工作的建议:)

2 个答案:

答案 0 :(得分:1)

我已done您对另一个答案的评论explained

Robot对于流程的各个部分非常有用,但根据其编写方式,遵循最佳测试实践的愿望以及整体需求可能会受到快速限制。如果你没有写它或最好的编码实践让你无法访问或直接测试应用程序的方面,那么其他方法是必要的。

我的经验使我使用反射来测试实际状态(如各种组件的文本值)。 Robot仅对我的案例有用key events

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

  1. 机器人? - 当然,尽可能使用它。
  2. 在满足要求的同时做最简单的事情。如果屏幕截图可以,请执行此操作(使用Robot)。如果您需要更多信息,可以JFrameJPanel get the components并保存所提供的资产。
  3. 通过调查UI,可以通过多种方式完成此操作。找到按钮并直接在其上执行doClick,使用Robot移动鼠标并按下鼠标等等。
  4. 当您实例化新的Robot时,它将链接到主设备。在new Robot().keyPress(KeyEvent.VK_ENTER);
  5. 之外的简单场景中不需要任何其他内容

    鉴于这一切,有焦点等陷阱。最好开始模拟/测试,而不是触摸机器的任何外围设备。此外,根据某些方法的运行时间,您可能需要Thread.sleep()(我们很遗憾地这样做)或使用连接的线程。

答案 1 :(得分:0)

您没有添加任何代码,所以我可以猜测:

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