2

Любые хорошие архитекторы программного обеспечения согласятся с тем, что когда кто-то строит новый проект с нуля, он не должен носить границы в начале (база данных, графический интерфейс, внешние сервисы и т. Д.) Действительно, он должен построить свое сердце независимо от каких-либо бэкэнд и думать о них как о просто «плагинах» для приложения.Приемочные испытания, касающиеся графического интерфейса пользователя?

TDD и приемочные испытания способствуют тому, что для каждой новой функции:

  1. Написать тест неисправного приема (от конца до конца) для функции
  2. Drive и завершить код дизайн благодаря некоторым модульным тестам
  3. Закончено, как только приемочные испытания проходят.

Однако многие статьи объясняют, что приемочный тест является действительно действительно сквозным тестом, включающим в себя, таким образом, графический интерфейс (браузер (например, Selenium) или какой-либо другой интерфейс).

Не следует Приемочное тестирование должно основываться на СЕРДЕЛЕ ПРИЛОЖЕНИЯ и независимо от каких-либо границ? Это заставило бы меня подумать о графическом интерфейсе, например ...: s

Что такое хорошая практика? Напишите два вида приемочных тестов для каждой функции: один для бизнес-логики и один, обеспечивающий работу графического интерфейса?

ответ

2

Прежде всего позвольте мне предложить читать Growing Object-Oriented Software, Guided by Tests от Стива Фримена и Нат Прайс. Это, безусловно, лучшая книга по тестированию программного обеспечения, которую я читал до сих пор. Самое замечательное в том, что авторы не сосредотачиваются на фиктивных примерах использования, таких как класс Calculator, и используют TDD для тестирования метода add(int, int). Это глупо. Вместо этого они создают полностью функционирующее приложение с интерфейсом Swing, сетевым подключением через XMPP и довольно большой бизнес-логикой. Это возвращает нас к вашему вопросу.

Авторы книги выше используют различные методы и инструменты, но они постоянно поддерживают методы TDD. Для модульных тестов они идут за , но для тестов приемки и интеграции они фактически автоматизируют запуск приложения (GUI) и тестового сервера XMPP.

Им удалось протестировать тесты графического интерфейса, используя высокое разделение между тестом и графическим интерфейсом. Вы должны скрыть свой пользовательский интерфейс (веб-сайт, рабочий стол, веб-сервис SOAP и т. Д.) За абстракцией под названием драйвер. Ваш тест взаимодействует только с драйвером, используя методы высокого уровня, такие как placeOrder("Foo"). Каждый драйвер (BrowserDriver, SwingDriver) понимает, что это значит и либо просматривает вашу веб-страницу, либо кнопки кликов по жирному графическому интерфейсу.

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

Смотрите также

+0

Благодаря Tomasz! На самом деле, я владею этой книгой, но еще не закончил :) Мне нравится понятие «объект страницы», о котором вы упомянули. Итак, чтобы подвести итог (до того, как я снова открою книгу), приемочный тест, связанный с графическим интерфейсом, определит общий «драйвер» (независимо от какого-либо конкретного графического интерфейса), и это можно было бы ввести Spring например (экземпляр драйвера selenium для webapp).Таким образом, я отказываюсь от идеи «низкоуровневого» приемочного теста, непосредственно связанного с услугами или сущностями, но скорее определяет уникальный тест Acceptance, связанный с интерфейсом «Driver» для одной функции. Имеет ли это смысл? – Mik378

+0

@ Mik378; более или менее. Вы получите «SeleniumDriver реализует драйвер». Весна (насколько мне нравится) здесь не нужна. Я считаю, что книга объяснит это гораздо более подробно и лучше меня. –

+1

Я предположил, что тест определяет поле «драйвер» и инициализируется через Spring своим собственным application-context.xml. Почему весна? Поскольку это может позволить держать тесты нетронутыми в тот день, когда мы добавляем другой тип GUI => просто изменяя конфигурационный файл xml Spring (http://roger-almeida.a.blogspot.fr/2012/01/page-object-pattern-webdriver -spring.html). Кстати, спасибо за ваш отличный ответ :) – Mik378

 Смежные вопросы

  • Нет связанных вопросов^_^