首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JUnit处理EDT/非EDT问题的最佳方法是什么?

用JUnit处理EDT/非EDT问题的最佳方法是什么?
EN

Stack Overflow用户
提问于 2016-04-24 11:54:50
回答 1查看 267关注 0票数 1

我有以下测试方法:

代码语言:javascript
复制
@Test public void f3KeystrokeShowsHotkeysDialog() throws AWTException{
    App app = new App();

    Robot robot = new Robot();
    robot.keyPress( KeyEvent.VK_F3 );

    try {
        Thread.sleep( 1000L );
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    assertTrue( app.mainFrame.hotkeysDlg.isVisible() );
}

使用sleep,这个assertTrue会通过;如果没有它,它就会失败。

原因很明显:必须在非EDT线程中执行的Robot在这里生成一个KeyEvent,该KeyEvent需要有限的时间来响应。

相应的Action如下:

代码语言:javascript
复制
    ActionMap am = mainFrame.getRootPane().getActionMap();
    Action f3Action = new AbstractAction(){
        @Override
        public void actionPerformed(ActionEvent arg0) {
            System.out.println("# blip...");

            mainFrame.hotkeysDlg.setVisible( true );
        }
    };
    am.put( "show hotkeys", f3Action );

. actionPerformed当然是在美国东部时间执行的

一个对测试很了解的人能告诉我:

  1. 我是否应该这样做,包括“任意”的睡眠?
  2. 是否有更好的框架或技术来处理这个问题,我认为这是一个相当普遍的情况?
  3. 我应该完全避免这种测试吗?我知道这不是这样的“单元测试”,但它是(我认为)功能测试:“按F3:一个热键对话框出现”<--这是应用程序的规范.
EN

回答 1

Stack Overflow用户

发布于 2016-04-30 18:45:37

对于那些对这类事情感兴趣的人来说,我会把我在过去几天里学到的东西提取出来。

首先,对GUI功能的测试似乎是一些“专业”在最后添加的东西:首先,你得到了应用程序的核心工作.

其次,GUI测试似乎具有很大的挑战性。

第三,我会将上述守则改为:

代码语言:javascript
复制
    App app = new App();
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_F3);
    robot.waitForIdle();
    EventQueue.invokeAndWait(new Runnable() {
        @Override
        public void run() {
            assertTrue(app.mainFrame.hotkeysDlg.isVisible());
        }
    });

..。演示Robot.waitForIdle()的使用..。并且正确地(我相信)在它所属的线程中测试可见性,即EDT。无论如何,这似乎是有效的,这是足够好的相处!

NB EventQueue.invokeAndWaitEventQueue.invokeLater不那么熟悉的兄弟,但是在这样的测试环境中,它似乎是非常关键的:如果您使用invokeLater,那么测试结束的可能性很大,并且会在assertTrue实际运行之前进行清理等等……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36822756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档