Модульный тест существующего кода пользовательского интерфейса - PullRequest
2 голосов
/ 09 марта 2012

Я какое-то время просматривал Интернет и этот сайт, и вместо того, чтобы найти какие-то способы для модульного тестирования моего существующего кода, единственной находкой было разделение логики и взаимодействия с пользователем (подход MVC).Хотя это отлично подходит для новых проектов, это отнимает много времени и, как следствие, слишком дорого для инвестиций в уже существующие.Есть ли способ создания специальных модульных тестов, идеально автоматизированных, для существующих проектов с графическим интерфейсом, которые, к сожалению, подключаются напрямую к базам данных или другим системам для получения данных и манипулирования данными до их отображения?В настоящее время у нас есть два проекта, один из которых - MFC, другой - C # .net 2.0. Большое спасибо.

Ответы [ 6 ]

3 голосов
/ 09 марта 2012

Модульное тестирование здесь не сработает, учитывая, что вы не можете изменить существующий код (не говоря уже о том, что вы на самом деле не тестируете пользовательский интерфейс).Вы должны искать какие-то средства автоматизации тестирования GUI / скриптов.Как Sikuli .Цитируя буквально первый абзац с их сайта:

Sikuli - это визуальная технология для автоматизации и тестирования графических пользовательских интерфейсов (GUI) с использованием изображений (снимки экрана).

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

1 голос
/ 10 марта 2012

Mocking, как правило, является лучшим подходом для моделирования точек интеграции, но, к сожалению, большинство сред Mocking терпят неудачу, если код слишком взаимосвязан и скрывает зависимости в частных методах и т. Д.Кроты (сделанные Microsoft), которые имеют очень мало ограничений на то, что вы можете издеваться.Это даже обрабатывает частные методы!Возможно, вы могли бы использовать его, чтобы высмеивать ваши вызовы БД, чтобы проверить ваши манипуляции с данными?Есть несколько уроков онлайн.Вот что может помочь вам начать: http://www.unit -testing.net / CurrentArticle / How-to-Mock-Code-Dependencies-Using-Moles.html

1 голос
/ 09 марта 2012

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

Я предполагаю, что вы уже провели модульное тестирование (сама Visual Studio поставляется с неплохимфреймворк модульного тестирования), так что вы хотите проверить не алгоритмы, а автоматизацию пользовательского интерфейса / результаты.Что это значит?Все, что является кодом , должно быть проверено кодом (например, операциями с базой данных и алгоритмами).Даже некоторые элементы управления пользовательского интерфейса могут быть каким-то образом протестированы с помощью кода (например: если я имитирую щелчок пользователя, я получу это событие, когда это условие выполнено).Поверьте мне, тестирование пользовательского интерфейса - это Black Art, и часто вы будете проходить неудачные тесты, даже если все в порядке.

Простой сценарий стресса

Для простого сценария, например, для стрессового воспроизведения приложения.ошибка, повторяющая одну и ту же операцию много раз, вы можете использовать макро-рекордер (например, WinMacro ).Вы регистрируете пользовательские вводы, а затем запускаете этот макрос в цикле.Если есть небольшая ошибка, у вас есть много шансов воспроизвести (и / или найти) ее, когда эти действия повторяются 5000 раз за ночь.После этого вы получите данные из своих журналов.

Простой сценарий

Если ваше приложение может быть каким-то образом автоматизировано (для приложения .NET может быть легко использовать VSA )Вы можете подготовить «хороший» макрос для автоматизации операции, поместить результаты в файл и сравнить их с известным файлом данных о хороших результатах.

Простой совет: для приложения MFC вы можете написать свой собственный «макрос» с помощьютекстовый файл, где каждая строка является сообщением Windows со своим параметром;прочитайте его, проанализируйте и SendMessage() отправьте в ваше приложение, чтобы имитировать пользовательский ввод, щелчки в меню и так далее.Возьмите, например, значение текстового поля и сравните с чем-то известным.WinSpy ++ - ваш друг.

Сложный сценарий

Для чего-либо еще (правильно ли мой пользовательский элемент управления рисует все правильно? Когда пользователь нажимает эту кнопку, тогда цвета пользовательского интерфейса меняются?), Вы должны использоватьболее сложный инструмент.Существует несколько инструментов для автоматизации тестирования пользовательского интерфейса, встроенных в Visual Studio 2010 (не во всех выпусках), необходимых для создания кодированных тестов пользовательского интерфейса .Что это значит?Вы пишете код для автоматизации вашего приложения, а затем пишете больше кода для проверки его результатов (иногда даже сравнивая битовые карты с известными результатами. Это может быть утомительно и много, но практически вы можете протестировать все, даже если приложениене был разработан для тестирования пользовательского интерфейса. Начните читать это с MSDN .

Существует также множество коммерческих инструментов (даже если я никогда не использовал их в любом проекте), поэтому я не пишулюбая ссылка, я думаю, у вас будет много результатов в Google.

1 голос
/ 09 марта 2012

Если вам повезло иметь премиальную (по крайней мере) версию Visual Studio 2010, то вы можете написать Кодированный тест пользовательского интерфейса .

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

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

1 голос
/ 09 марта 2012

Возможно произвести некоторый уровень автоматического тестирования, но не юнит-тесты.

Юнит-тесты, по определению, тестируют небольшие логические единицы, отсоединенные от системы в целом. Я бы рекомендовал, чтобы новый код был написан так, как вы описали (mvc и т. Д.), Чтобы он был тестируемым на модуле.

С вашим существующим кодом модульное тестирование, очевидно, потребует рефакторинга, что, я ценю, не в ваших временных рамках. Вам нужно будет поработать с тем, что вы увидели, чтобы выполнить более автоматизированное тестирование всей системы, возможно, через пользовательский интерфейс. Тот факт, что это не модульные тесты, - кстати, есть полезные тесты, даже если у вас есть модульные тесты. Полезно знать разницу, когда вы ищете ресурсы.

Вы, вероятно, лучше всего ищете автоматическое тестирование пользовательского интерфейса. С приложениями .net вы можете найти что-то вроде Белый полезный

1 голос
/ 09 марта 2012

Модульное тестирование уже существующего проекта всегда является проблемой.Однако я указываю на некоторые инструменты с открытым исходным кодом, которые помогут вам автоматизировать модульное тестирование

C ++

Повысить структуру модульного тестирования

Google Mock

C #

NUnit

NMock

...