Самый простой способ unit test SWT и Swing приложений в безголовой среде?

Я ищу unit test некоторый SWT и Swing код для проекта, над которым я работаю, и тесты работают нормально, пока я запускаю их из eclipse.

Как только я запускаю их в своей среде hudson, это терпит неудачу, так как hudson запускает тесты в режиме безголовых.

Какой лучший способ сделать это? Решения с открытым исходным кодом только пожалуйста (поскольку проект является открытым исходным кодом).

Ответы

Ответ 1

Вы можете запустить Xvfb (X виртуальный фреймбуфер, сервер X11, который выполняет все графические операции в памяти), и это отлично работает.

Но есть еще одно решение с плагином Хадсона для Xvnc. Просто установите плагин и установите флажок на экране конфигурации задания:

alt text http://www.justinedelson.com/blog/wp-content/uploads/xvnc_box.jpg

Затем Хадсон автоматически запустит сеанс Xvnc и установит переменную среды DISPLAY в соответствующее значение, а затем выключит сеанс, когда сборка будет завершена. Одно из преимуществ этого метода по сравнению с методом Xvfb заключается в том, что если у вас одновременно есть несколько проектов Swing/SWT, каждая сборка имеет свой собственный сеанс X. Это может быть не проблема, но это кажется хорошей идеей.

Перед использованием этого плагина, очевидно, необходимо установить Xvnc. Что менее очевидно (хотя и разумно), так это то, что вы также должны установить пароль. Вы делаете это, запустив:

$ vncpassword

Это должно быть сделано как тот же пользователь, что и Хадсон.

Ответ 3

Использование Swing Я стараюсь упорядочить вещи так, чтобы дерево компонентов можно было создать без окна в верхней части. Это позволяет вам просто создать JPanel в unit test и использовать его как ваш компонент верхнего уровня. Есть определенные вещи, которые вы не можете тестировать, такие как фокус и любая логика, связанная с созданием фрейма для нормальной работы, но подавляющее большинство может быть протестировано.

Вы можете захотеть заглянуть в библиотеку FEST, чтобы облегчить жизнь, будь вы безголовым или нет, это выглядит очень хорошо: http://fest.easytesting.org/swing/wiki/pmwiki.php

Ответ 5

Я не знаю о SWT, но с Swing вы не можете. Любое создание экземпляра окна (JFrame, JDialog и т.д.), Даже если оно никогда не будет видимым, будет взорваться в режиме безглавых (на JDK 5). То, что мы делали, не запускалось в режиме безголового и не устанавливало Xvfb, чтобы обеспечить окно без фактической установки реальной оконной системы.

Ответ 6

Вы можете попробовать RedDeer. https://github.com/jboss-reddeer/reddeer

• Поддержка запуска тестов в среде Jenkins CI (например, Hudson)