有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java等效GUI组件Swing

我有以下问题:给定一个Swing GUI应用程序(包括源代码),我如何确定两个组件(例如:JButtons、JList等)是等效的(以相同的用户代码对其上生成的相同事件执行的方式)

我的观点是,首先,对于所有可用的事件,它们需要以相同的顺序拥有相同的侦听器(我只讨论应用程序本身添加的侦听器),然后这些侦听器的代码不能依赖于生成的事件的源(因此,它们的代码中不应调用“Action命令”或e.getSource()

这是一个关于我正在研究的GUI应用程序的研究项目,我试图研究如何通过检测等效组件来减少GUI测试用例的数量。如果你对此有任何想法(也许我没有考虑到什么),请分享

谢谢


共 (1) 个答案

  1. # 1 楼答案

    就我个人而言,我觉得这取决于你对“等价物”的定义。根据您的定义,这意味着“当应用程序生成事件时,同样的事情也会在应用程序中发生”。 但“同一件事”指的是用户视角还是程序员视角

    如果是前者,那么这个问题是多余的,因为用户只需要检查不同的动作是否会导致相同的视觉结果,以确定它们是否等效。然而,这需要进一步思考——两个小部件的即时视觉效果可能是相同的,但从长远来看,用户的操作可能并不“等效”。e、 g.按下按钮A,观察A;但是,如果你选择了列表B,你会再次观察到a,但也可能会发生一些用户未检测到的不明显事件B。从长远来看,这可能会影响一些事情。因此,从用户的角度来看,等价性可能是一个棘手的问题

    后一种情况更难分析。一种方法是,正如您所提到的,它们共享同一个侦听器,即使用相同的方法来处理这两个小部件。他们可以选择使用不同的侦听器,甚至可能使用不同的方法,但如果这两种方法基本上遵循相似的逻辑或目的,那么它们可能是“等效的”。然而,这可能是具体情况,可能是一个非常微妙的话题(比较方法)

    另一个想法是:你也可以选择在小部件上对各种不同的测试和输入进行实验,并得出一些统计值,为你的比较分配一个确定性度量(例如,这些小部件在提供的输入中超过80%是等效的)。这可能适用于比较文本输入,例如JTextArea和JTextField

    你的假设可能也会影响你对等价性的定义。e、 g.假设这些输入,A和B是等效的

    这些只是我的一些想法和观点。毕竟,这是一篇研究论文。希望我提供了一些思考的食物

    编辑

    我认为,对事件本身的探测是一个微不足道的细节。重要的是如何处理事件。本质上,你的问题归结为:是否有某种方法可以比较特定事件的事件处理程序。老实说,我不确定如何做到这一点(可能会比较堆栈,检查代码冗余,检查is-a关系)。我真的不知道怎样才能进行这样的比较