Как писать тесты, используя Watin & SpecFlow, которые не связаны с вашей HTML-разметкой? - PullRequest
3 голосов
/ 22 марта 2012

Я изучил основы веб-интеграционного тестирования с использованием SpecFlow и WatiN. Насколько я понимаю, SpecFlow решает, прошел ли тест, основываясь на том, присутствует ли на странице конкретная разметка HTML - кнопки, ссылки и т. Д.
Но не значит ли это, что мои интеграционные тесты тесно связаны с моим пользовательским интерфейсом? Например, если в функции ABC Watin ищет определенный HTML-элемент, который должен присутствовать (скажем, это таблица), и я внезапно изменяю свой пользовательский интерфейс, чтобы эта таблица превратилась в кучу элементов div, WatiN не сможет найти и мой тест на функцию ABC не удастся. Как я могу избежать таких ситуаций?
Мои предложения - а) Я должен написать тесты WatiN, чтобы на них как можно меньше влияли изменения в дизайне пользовательского интерфейса.
б) Я должен сделать дизайн пользовательского интерфейса, чтобы WatiN все еще понимал его, если я изменю его
c) Я должен использовать библиотеку с WatiN, которая может распознавать изменения в дизайне пользовательского интерфейса
Какие-либо предложения? Где я не прав?
EDIT Я идиот - я забыл упомянуть, что использую ASP.NET MVC

1 Ответ

2 голосов
/ 23 марта 2012

Сначала вы должны решить, действительно ли вам нужно пройти через пользовательский интерфейс. Вероятно и особенно, если вы хотите убедить заинтересованную сторону в том, что эти спецификации действительно используют систему. Но позже вы можете захотеть использовать систему на уровне домена или прямо под пользовательским интерфейсом (например, контроллер в архитектуре MVC).

Возможно, вы даже захотите переключаться между двумя версиями

В любом случае вы хотите абстрагироваться от жесткой связи между вашими определениями шагов и реальным приложением (будь то страница или контроллер).

Один из способов сделать это - использовать шаблон объекта Page , который в основном является классом-оберткой для тестируемой страницы. Этот класс предоставляет удобный интерфейс для взаимодействия со страницей (например, метод для отправки формы, свойства для заполнения формы и другие свойства для запроса страницы на содержание).

То, как вы на самом деле взаимодействуете или автоматизируете, страница «скрыта» внутри объекта страницы, и нужно менять это место только в том случае, если (когда? :)) она меняется.

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

Подсказка - постараться сделать ваши определения шагов короткими. Супер короткая - одно утверждение или строка. И переместить остальную часть логики вниз на уровень автоматизации.

Также не пропустите эту отличную презентацию Мэтта Уинна, которая показывает это в отличной форме

...