2015-05-12 2 views
0

Я тестирую приложение (проект экзамена). В этом конкретном случае я тестирую, что текстовое поле ведет себя так, как должно, когда фокус меняется.Имитация изменений фокуса в JUnit [GUI/Swing]

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() с тем же результатом.

+0

http://stackoverflow.com/questions/17680817/difference-between-requestfocusinwindow-and-grabfocus-in-swing. Возможно, попробуйте grabFocus. –

ответ

0

компоненты не получают фокус немедленно. Это запросы фокуса выполняются асинхронно. Поэтому, когда ваш код выполняет изменение фокуса, еще не сделано.

Прочитать раздел на Requesting Focus. Один комментарий, в частности, говорится:

developers must never assume that this Component is the focus owner until this Component receives a FOCUS_GAINED event.

читайте также раздел Focus and PropertyChangeListener поскольку KeyboardFocusManager может прослушивать все изменения фокуса, так что вам не нужно, чтобы добавить FocusListener к каждому компоненту.

Смежные вопросы