Пользовательский интерфейс для тестового вождения проблематичен, потому что вы часто не знаете, что хотите видеть на экране, пока не увидите это на экране. По этой причине разработка графического пользовательского интерфейса имеет тенденцию к массовой итерации, и поэтому ее очень трудно проводить с помощью тестов.
Это не означает, что мы просто отказываемся от TDD в пользу графических интерфейсов. Скорее, мы выталкиваем из графического интерфейса как можно больше кода, оставляя после себя только простой код подключения. Эта проводка позволяет нам вносить необходимые массовые итерационные изменения, не затрагивая сути проблемы.
Этот метод, вероятно, лучше всего описал Майкл Фезерс несколько лет назад в статье, озаглавленной "Диалоговое окно Humble". "а>. Это также основная идея шаблона Model-View-Presenter, который четыре года вызывал такой ажиотаж. тому назад; и теперь разделен на шаблоны Passive View и Supervising Controller. Ссылка на статью в этом вопросе использует эти идеи, но в виде теста после, а не через тестирование.
Идея состоит в том, чтобы протестировать все, кроме вида. Действительно, нам даже не нужно долго писать представление. Действительно, представление настолько абсурдно просто, что, вероятно, вообще не нуждается в каких-либо модульных тестах. Или, если это так, они могут быть записаны последними.
Чтобы протестировать Supervising Controller, вы просто должны убедиться, что понимаете, как данные будут представлены на экране. Вам не нужно знать, где находятся данные, какой у них шрифт, какого они цвета, или какие-либо другие косметические проблемы, которые вызывают массовую итерацию графических интерфейсов. Скорее вы знаете, что один элемент данных будет своего рода текстовым полем. Другой будет меню, еще один будет кнопкой или флажком. И затем вы убедитесь, что представление может задать все вопросы, которые ему необходимо задать, чтобы правильно отобразить эти элементы.
Например, текстовое поле может иметь значение по умолчанию. Представление должно иметь возможность запрашивать это. В меню некоторые пункты могут быть выделены серым цветом. Представление должно иметь возможность запрашивать эту информацию. Все вопросы, которые задает представление, относятся к представлению и лишены бизнес-правил.
Точно так же представление сообщит наблюдающему контроллеру, когда что-либо изменится. Контроллер изменит данные соответствующим образом, включая любую проверку и устранение ошибок, а затем представление может спросить, как должны быть представлены эти данные.
Все это можно протестировать, потому что все это отделено от визуального дисплея. Все дело в том, как данные обрабатываются и представляются, а не в том, как они выглядят. Так что не нужно массово повторять.
person
Uncle Bob
schedule
23.03.2009