Как я могу тестировать GUI? - PullRequest
144 голосов
/ 18 октября 2008

Вычисления в моем коде хорошо проверены, но поскольку кода GUI так много, общее покрытие кода ниже, чем хотелось бы. Есть ли какие-либо рекомендации по модульному тестированию кода GUI? Это вообще имеет смысл?

Например, в моем приложении есть графики. Я не смог понять, как автоматизировать тестирование графиков. Для проверки правильности графика требуется человеческий глаз AFAIK.

(я использую Java Swing)

Ответы [ 13 ]

65 голосов
/ 18 октября 2008

Такие конструкции, как MVP и MVC, обычно пытаются абстрагировать как можно больше логики от реального графического интерфейса. Одна очень популярная статья об этом - "Диалоговое окно смирения" Майкла Фезерса. Лично у меня был неоднозначный опыт в попытке вывести логику из пользовательского интерфейса - иногда это работало очень хорошо, а в других случаях было больше проблем, чем оно того стоило. Хотя это несколько выходит за рамки моей компетенции.

33 голосов
/ 19 октября 2008

Конечно, ответ - использовать MVC и вывести как можно больше логики из GUI.

При этом я давно слышал от коллеги, что когда SGI портировал OpenGL на новое оборудование, у них было несколько модульных тестов, которые выводили на экран набор приматов, а затем вычисляли сумму MD5 кадровый буфер. Затем это значение можно сравнить с известными хорошими значениями хеш-функции, чтобы быстро определить, является ли API точным на пиксель.

10 голосов
/ 18 октября 2008

Вы можете попробовать UISpec4J - библиотека с открытым исходным кодом для функциональной и / или модульной проверки для приложений Java на основе Swing ...

6 голосов
/ 16 июня 2009

Вы можете попробовать использовать Огурец и Swinger для написания функциональных приемочных тестов на простом английском языке для приложений Swing GUI. Swinger использует библиотеку Джемми из Netbeans для управления приложением.

Cucumber позволяет вам писать тесты так:

 Scenario: Dialog manipulation
    Given the frame "SwingSet" is visible
    When I click the menu "File/About"
    Then I should see the dialog "About Swing!"
    When I click the button "OK"
    Then I should not see the dialog "About Swing!"

Взгляните на это демоверсию видео Swinger , чтобы увидеть его в действии.

6 голосов
/ 18 октября 2008

Вот несколько советов:

Попробуйте удалить как можно больше кода из графического интерфейса (иметь контроллер и объект модели), чтобы вы могли протестировать их без графического интерфейса.

Для графического объекта вы должны проверить значение, которое вы указываете в коде, который генерирует графическое изображение.

5 голосов
/ 06 апреля 2015

Тестирование - это вид искусства. Я согласен, логика должна быть удалена GUI, насколько это возможно. Затем мы можем сосредоточить наше тестирование там. Как и все остальное, тестирование сводится к снижению риска. Вам не всегда нужно тестировать все, но часто лучше разбить разные тесты для разных областей.

Другой вопрос: что вы на самом деле пытаетесь протестировать на уровне пользовательского интерфейса? Тестирование пользовательского интерфейса - самое дорогое тестирование, потому что оно обычно требует больше времени для создания, обслуживания и является самым хрупким. Если вы проверяете логику, чтобы узнать правильность координат, прежде чем пытаться нарисовать линию, что конкретно вы тестируете? Если вы хотите проверить график с красной линией. Можете ли вы дать ему набор заданных координат и проверить, являются ли определенные пиксели красными или не красными? Как было предложено выше, сравнение растровых изображений работает, Selenium, но моя главная задача - не чрезмерное тестирование графического интерфейса, а тестирование логики, которая поможет создать пользовательский интерфейс, а затем сосредоточиться на том, какая часть пользовательского интерфейса ломается или подозрительно, и сосредоточить несколько тестов. есть.

5 голосов
/ 18 октября 2008

Существует Selenium RC , который будет автоматизировать тестирование веб-интерфейса. Он будет записывать действия и воспроизводить их. Вам все равно нужно будет пройти через взаимодействие с вашим пользовательским интерфейсом, так что это не поможет с покрытием, но может использоваться для автоматизированных сборок.

3 голосов
/ 05 ноября 2008

Что вы поняли из вашего вопроса, так это то, что вы ищете автоматизированный способ детального тестирования вашего поведения графического интерфейса пользователя. В качестве примера вы приводите проверку правильности построения кривой.

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

Ваши параметры в значительной степени зависят от того, какие платформы / наборы инструментов / платформы вы используете: например, приложение, использующее Qt в качестве своей структуры GUI, может использовать Squish для автоматизации своих тестов. Вы проверяете результаты своих тестов один раз, а последующие автоматически выполненные тесты сравнивают результаты с проверенными результатами.

3 голосов
/ 18 октября 2008

Вы можете использовать JFCUnit для тестирования вашего графического интерфейса, но графика может быть более сложной. Я пару раз делал снимки моего графического интерфейса и автоматически сравнивал его с предыдущей версией. Хотя это и не дает фактического теста, оно предупреждает вас, если автоматическая сборка не дает ожидаемого результата.

2 голосов
/ 28 декабря 2009

Окно Licker для Swing & Ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...