【问题标题】:How to trigger a KeyPressed event for unit testing in JAVA如何在 JAVA 中触发 KeyPressed 事件以进行单元测试
【发布时间】:2012-10-21 22:06:29
【问题描述】:

好的,所以我正在尝试对一些 GUI 元素进行单元测试。我有一个 JButton,其文本为“创建”,助记符设置为“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

【问题讨论】:

    标签: java groovy keyevent


    【解决方案1】:

    你说:

    我有一个 JButton,其文本为“创建”,助记符设置为“C”或代码 67。 ...
    但是,我现在想编写一个单元测试来测试同一个按钮的助记符部分是否与按钮单击相同。 ...

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

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

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

    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 插件。
    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2015-04-17
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多