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