AssertJ Swing случайный сбой теста - PullRequest
0 голосов
/ 03 мая 2020

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.

У кого-нибудь есть идеи? Это очень сложная проблема.

...