如何在JAVA中触发单元测试的KeyPressed事件

时间:2012-10-21 13:55:43

标签: java groovy keyevent

好的,所以我正在尝试单元测试一些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

1 个答案:

答案 0 :(得分:0)

你说:

  

我有一个JButton,文本为“Create”,助记符设置在'C'或代码67. ...
  但是,我现在想编写一个单元测试来测试该按钮的助记符部分与按钮点击的工作方式相同。 ......

     

我尝试过使用awt库中的Robot:

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

也许问题是由于你没有考虑到JButton助记符是alt-key组合,因此你的机器人代码可能必须反映这一点:

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);
相关问题