Java 在JUnit[GUI/Swing]中模拟焦点更改

Java 在JUnit[GUI/Swing]中模拟焦点更改,java,swing,junit,Java,Swing,Junit,我正在测试我们的(考试项目)申请。在这个特殊的例子中,我正在测试当焦点改变时textfield的行为是否正常 JTextField main = xa.getTextField(); String prompt = "Insert text"; String selected = ""; assertTrue(!main.isFocusOwner()); assertTrue(main.getText().equals(prompt)); main.requestFo

我正在测试我们的(考试项目)申请。在这个特殊的例子中,我正在测试当焦点改变时textfield的行为是否正常

JTextField main = xa.getTextField();
String prompt = "Insert text";
String selected = "";

    assertTrue(!main.isFocusOwner());
    assertTrue(main.getText().equals(prompt));

    main.requestFocusInWindow();

    assertTrue(main.isFocusOwner());
    assertTrue(main.getText().equals(selected));
最后两个assertTrue语句抛出一个断言错误。为什么会这样?我还尝试了requestFocus(),结果相同。

使用:

请参见此处的其他解决方案:
组件不会立即获得焦点。也就是说,焦点请求是异步执行的。因此,当代码执行时,焦点的更改还没有完成

阅读上的部分。一项评论特别指出:

在该组件收到焦点事件之前,开发人员决不能假定该组件是焦点所有者。

另外,请阅读关于焦点和属性更改侦听器的部分,因为KeyboardFocusManager可以侦听所有焦点更改,因此不需要向每个组件添加FocusListener。

。也许试着抓住焦点。
JTextField main = xa.getTextField();

main.grabFocus();

assertTrue(main.isFocusOwner());