Context
Я получил тест AssertJ-Swing (3.9.2) , который вызывает у меня головную боль, иногда он завершается с ошибкой ComponentLookupError, заявляющей, что вся иерархия компонентов пусто. Это точный сценарий этого вопроса , с добавлением , которое я использую VN C на моем Travis istance.
Интересная часть: сбои сосредоточены только на этом конкретном тесте, размещенном в классе из двух тестовых классов для реализаций JDialog абстрактного класса.
- TodoDialog : абстрактный класс
- NewTodoDialog и EditTodoDialog реализует TodoDialog . Они делают очень похожую работу, отсюда и абстрактный класс. Я начал собирать пользовательский интерфейс в методе
initFrame
в TodoDialog
, но затем стер его и повторил код в обоих конструкторах реализованных классов, так как предположил, что это может быть причиной поведения теста.
Инкриминируемый тест
Странное поведение показано на NewTodoDialogTest.testClearTagsShouldRestoreTagLabel
, NewTodoDialogTest другие тесты работают нормально, никаких проблем нет.
[ERROR] Tests run: 6, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.404 s <<< FAILURE! - in com.riccardomalavolti.apps.todolist.view.NewTodoDialogTest
[ERROR] testClearTagsShouldRestoreTagLabel(com.riccardomalavolti.apps.todolist.view.NewTodoDialogTest) Time elapsed: 0.727 s <<< ERROR!
org.assertj.swing.exception.ComponentLookupException:
Unable to find component using matcher org.assertj.swing.core.NameMatcher[name='tagComboBox', type=javax.swing.JComboBox, requireShowing=true].
Component hierarchy:
com.riccardomalavolti.apps.todolist.view.NewTodoDialog[name='dialog1', title='New To Do ', enabled=true, modal=false, visible=true, showing=true]
at com.riccardomalavolti.apps.todolist.view.NewTodoDialogTest.testClearTagsShouldRestoreTagLabel(NewTodoDialogTest.java:146)
Это код теста:
@Test @GUITest
public void testClearTagsShouldRestoreTagLabel() {
// Selecting an element
window.comboBox("tagComboBox").selectItem(0);
assertThat(window.comboBox("tagComboBox").selectedItem()).isEqualTo("Bar");
assertThat(window.label("tagLabel").text()).isEqualTo("(Bar)");
// Click on Clear Tag
window.button("clearButton").click();
assertThat(window.label("tagLabel").text()).isEqualTo(NewTodoDialog.TAG_LBL_NO_TAG_TEXT);
assertThat(window.comboBox("tagComboBox").selectedItem()).isNull();
}
Я пытался использовать Awatility, устанавливая ожидание для панели / метки / кнопки, но это не сработало, и это имеет смысл для меня, так как другие тесты (которые взаимодействуют с теми же компонентами) работают нормально. Я пытался использовать скрипт для выполнения тестов на vn c также на моей локальной машине, но он заморозил KDE.
У кого-нибудь есть идеи? Это очень сложная проблема.