Тестирование GUI - все еще ужасная задача. Есть инструменты, которые помогут вам отслеживать и воспроизводить интерактивный ввод. Я использовал часть этого API (код, украденный из Perl), чтобы внедрить события нажатия клавиш в другое приложение (чтобы открыть новый URL в Firefox, не всегда открывая новую вкладку). Но это не совсем хорошо для тестирования.
Расширенные инструменты стоят несколько килограмм долларов и поставляются с внешними языками сценариев, а отчеты об удобстве использования разделены. http://en.wikipedia.org/wiki/List_of_GUI_testing_tools
В тестировании GUI есть две разные области. Один - это заполнение диалогов с пользовательскими настройками, а другой - тестирование модели / вида.
Первое можно легко решить с помощью нескольких правил кодирования. Например, диалоги ничего не изменяют, а принимают и возвращают классы со всеми опциями. В этом случае вы можете просто заменить код диалога своим собственным кодом. Это легкая часть. В моем диалоговом окне кода измените настройки INI-файла, а затем просто уведомите модель с несколькими подсказками о том, что изменилось.
Тестирование вида и модели намного сложнее. Если речь идет о рисовании, вы можете попытаться использовать сообщение WM_PRINT для захвата вида, а затем запустить тест и сравнить его вывод с предыдущими захваченными данными. Если растровые изображения совпадают, тест проходит. Я никогда не видел, чтобы эта техника применялась в реальном мире, за исключением одного инструментария, в котором она использовалась для тестирования пиксельного рисования на нескольких платформах.
Далее идет тестирование модели на основе интерактивного кода. Как упоминалось ранее, ключевые события легче эмулировать, так как большинство из них напрямую переводятся в отдельный код обработки команд, поэтому вы просто тестируете команды, а не обработчик событий ключа. Выбор мыши и манипулирование, например, выбор объекта на холсте, намного сложнее. Либо воспользуйтесь одним из инструментов тестирования, которые обещают захватывать и воспроизводить действия мыши, либо молитесь.
Есть много разных способов в зависимости от вашей собственной кодовой базы, если вы абстрагируетесь от MFC достаточно хорошо, чтобы использовать фиктивные объекты GUI вместо реальных окон MFC. И если вы уже внедрили язык сценариев, который может помочь вам в тестировании и т. Д., Извините, простой схемы не существует. Это должно быть решено в каждом конкретном случае.
Мой собственный опыт показывает, что мне совсем не нравятся GUI модульного тестирования и модульное тестирование. Это часто не стоит времени. Я использую Eiffel и Design by Contract (это означает множество заявлений об утверждении), и я провожу обширные бета-тесты с заказчиками и позволяю заказчикам находить оставшиеся ошибки. В любом случае, большинство ошибок - это непроверяемые ошибки юзабилити.