Я смог запустить нужный мне метод, используя decorator pattern
, чтобы обернуть мои JTextFields в их собственный слушатель.Поскольку поле DecoratedJText реализует focusListener, для него можно легко вызвать метод focusGained ().
Вот пример класса декоратора:
public class SmartTextField implements FocusListener{
private JTextField field;
public SmartTextField(JTextField field) {
this.field = field;
}
@Override
public void focusGained(FocusEvent e) {
System.out.println(e);
//Here you can add logic that applies to the field, e.g.
field.selectAll();
...
}
@Override
public void focusLost(FocusEvent e) {
System.out.println(e);
...
}
public JTextField getField() {
return field;
}
Теперь для тестирования он становитсядовольно просто, вы даже можете вызвать метод, используя нулевые события!но вам, вероятно, понадобится источник для вашей логики.
@Test
public void testSomeMethod() {
...
for (SmartTextField field : SmartTextFieldCollection())
field.focusGained(new FocusEvent(field.getField(),FocusEvent.FOCUS_GAINED));
field.focusGained(null);
assertTrue(condition);
...
}
Бонус за код!Для реализации просто добавьте украшенное поле в качестве слушателя фокуса, оно будет хорошо работать как при запуске, так и при тестировании:
JTextField field = new JTextField();
SmartTextField smartTextField = new SmartTextField(field);
field.addFocusListener(smartTextField);
Это было особенно полезно, потому что теперь у меня есть самодостаточный и простой для тестирования textField.Декоратор реализует собственную логику полей, например, проверку данных и, в моем случае, подготовку информации для последующего обновления, надеюсь, это поможет.Я действительно гордился своим решением.