Самый простой способ 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
Это должно быть сделано как тот же пользователь, что и Хадсон.
Ответ 2
Попробуйте Abbot Java GUI Testing Framework и SWTbot. По крайней мере, SWTbot должен иметь возможность сделать это.
Если ни один из них не предлагает режим без звука, то это сообщение в блоге может дать вам некоторые идеи, как избавиться от пользовательского интерфейса для тестирования.
Ответ 3
Использование Swing Я стараюсь упорядочить вещи так, чтобы дерево компонентов можно было создать без окна в верхней части. Это позволяет вам просто создать JPanel в unit test и использовать его как ваш компонент верхнего уровня. Есть определенные вещи, которые вы не можете тестировать, такие как фокус и любая логика, связанная с созданием фрейма для нормальной работы, но подавляющее большинство может быть протестировано.
Вы можете захотеть заглянуть в библиотеку FEST, чтобы облегчить жизнь, будь вы безголовым или нет, это выглядит очень хорошо: http://fest.easytesting.org/swing/wiki/pmwiki.php
Ответ 4
Я был уверен, что я разместил это здесь раньше, не уверен, что с ним случилось.
Cacio позволяет запускать Swing app без головы.
http://rkennke.wordpress.com/2011/10/17/cacio-for-ui-testing/
Ответ 5
Я не знаю о SWT, но с Swing вы не можете. Любое создание экземпляра окна (JFrame, JDialog и т.д.), Даже если оно никогда не будет видимым, будет взорваться в режиме безглавых (на JDK 5). То, что мы делали, не запускалось в режиме безголового и не устанавливало Xvfb, чтобы обеспечить окно без фактической установки реальной оконной системы.
Ответ 6
Вы можете попробовать RedDeer.
https://github.com/jboss-reddeer/reddeer
• Поддержка запуска тестов в среде Jenkins CI (например, Hudson)