如何在JAVA中为单元测试触发按键事件

如何在JAVA中为单元测试触发按键事件,java,groovy,keyevent,Java,Groovy,Keyevent,好的,我正在尝试对一些GUI元素进行单元测试,我有一个JButton,文本为“Create”,助记符设置为“C”或代码67。我可以编写一个单元测试,我可以调用.doClick函数并断言按钮应该做的事情会发生 但是,我现在想编写一个单元测试来测试同一个按钮的助记符部分是否与单击按钮的工作方式相同。我已经断断续续地搜索了几天,尝试了很多东西 我尝试使用awt库中的Robot: robot.keyPress(KeyEvent.VK_C); robot.keyRelease(KeyEvent.VK_C)

好的,我正在尝试对一些GUI元素进行单元测试,我有一个JButton,文本为“Create”,助记符设置为“C”或代码67。我可以编写一个单元测试,我可以调用.doClick函数并断言按钮应该做的事情会发生

但是,我现在想编写一个单元测试来测试同一个按钮的助记符部分是否与单击按钮的工作方式相同。我已经断断续续地搜索了几天,尝试了很多东西

我尝试使用awt库中的Robot:

robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
没有触发任何事件,最近我尝试了以下EventQueue示例:

final Toolkit toolkit = Toolkit.getDefaultToolkit();
final EventQueue eventQueue = toolkit.getSystemEventQueue();
gPane = new SwingBuilder();
panel = new MainMenuPanel();
panel.displayMainMenu(gPane); 

@Test
void ShouldMakeRaceGenderPanelVisibleKeyPress(){
eventQueue.postEvent( new KeyEvent(panel.gPane.mainM, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_C ).getKeyCode());

    assertThat panel.gPane.mainM.isVisible(), is(false);
    assertThat panel.gPane.raceGender.isVisible(), is(true);
}
我知道GUI测试可能很棘手,而且有很多工具可以模拟用户交互,但是仅仅模拟或触发一个KeyEvent真的有那么难吗

欢迎提供任何帮助,也欢迎推荐任何UI测试工具

谢谢

注意:这是Java和Groovy的结合,所以我使用SwingBuilder来构建我的UI

我有一个JButton,文本为“Create”,助记符设置为“C”或代码67
然而,我现在想写一个单元测试来测试同一个按钮的助记符部分是否与按钮点击相同

我尝试使用awt库中的Robot:

robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
问题可能是因为您没有考虑到JButton助记符是alt键组合,因此您的robot代码可能必须反映这一点:

robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_C);

// possibly want a small Thread.sleep(...) here?

robot.keyRelease(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_ALT);

的确,在大多数情况下,助记符与alt键结合使用,但在这个特定的应用程序中,这更像是一个游戏类型的环境,因此用户可以用鼠标单击按钮,或按c来执行相同的操作。我终于能够使用Robot实现这一点,然而,我不得不将FEST Swing插件添加到我的项目中。