我有以下测试方法:
@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如下:
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当然是在美国东部时间执行的
一个对测试很了解的人能告诉我:
发布于 2016-04-30 18:45:37
对于那些对这类事情感兴趣的人来说,我会把我在过去几天里学到的东西提取出来。
首先,对GUI功能的测试似乎是一些“专业”在最后添加的东西:首先,你得到了应用程序的核心工作.
其次,GUI测试似乎具有很大的挑战性。
第三,我会将上述守则改为:
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.invokeAndWait是EventQueue.invokeLater不那么熟悉的兄弟,但是在这样的测试环境中,它似乎是非常关键的:如果您使用invokeLater,那么测试结束的可能性很大,并且会在assertTrue实际运行之前进行清理等等……
https://stackoverflow.com/questions/36822756
复制相似问题