Поблочное тестирование MFC приложения UI?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

17
задан EricSchaefer 19 March 2015 в 13:32
поделиться

6 ответов

Это зависит от того, как Приложение структурировано. Если код логики и GUI разделяется (MVC), затем тестирующий логику, легко. Смотрите на Michael Feathers "Скромное Диалоговое окно" (PDF).

РЕДАКТИРОВАНИЕ: Если Вы думаете об этом: необходимо очень тщательно осуществить рефакторинг, если Приложение не структурировано тот путь. Нет никакой другой техники для тестирования логики. Сценарии, которые моделируют щелчки, просто царапают поверхность.

Это на самом деле довольно легко:

Предполагают, что Ваш control/window/whatever изменяет содержание поля списка, когда пользователь нажимает кнопку, и Вы хотите удостовериться, что поле списка содержит правильный материал после щелчка.

  1. Осуществляют рефакторинг так, чтобы был отдельный список с объектами для поля списка для показа. Объекты хранятся в списке и не извлечены из того, везде, куда Ваши данные прибывают из. Код, который делает вещи списка поля списка, знает только о новом списке.
  2. Затем Вы создаете новый объект контроллера, который будет содержать логический код. Метод, который обрабатывает нажатие кнопки только, называет mycontroller-> ButtonWasClicked (). Это еще не знает о поле списка или anythings.
  3. MyController:: ButtonWasClicked () делает то, что является потребностью, которая будет сделана для намеченной логики, готовит список объекта и говорит управлению обновлять. Чтобы это работал, необходимо отделить контроллер и управление путем создания интерфейса (чистый виртуальный класс) для управления. Контроллер знает только объект того типа, не управление.

Thats это. Контроллер содержит логический код и знает управление только через интерфейс. Теперь можно записать регулярный модульный тест на MyController:: ButtonWasClicked () путем насмешки управления. Если Вы понятия не имеете, о чем я говорю, прочитайте статью Michaels. Дважды. И снова после этого.
(Отмечают к сам: должен учиться не болтать так очень)

12
ответ дан 30 November 2019 в 12:01
поделиться

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

Теперь то, что я собираюсь предложить, определенно тяжелая работа .. но с некоторой дисциплиной и настойчивостью Вы будете видеть преимущество достаточно скоро.

  • Первый Вам будет нужно некоторое управление, поддерживающее новые меры для взятия немного дольше. Удостоверьтесь, что все понимают почему.
  • Следующая покупка копия книга WELC. Считайте его полный, если у Вас есть время ИЛИ если Вы в затруднении, сканируете индекс для нахождения признака приложение показывает. Эта книга содержит большой хороший совет и, в чем Вы нуждаетесь при попытке получить существующий тестируемый код. alt text
  • Затем для каждого нового фиксируют/изменяют, проводят некоторое время и понимают область, Вы собираетесь продолжить работать. Запишите некоторые тесты в xUnit варианте, по Вашему выбору (в свободном доступе) для осуществления текущего поведения.
  • Удостоверяются вся тестовая передача. Запишите новый тест, который осуществляет необходимое поведение или ошибку.
  • Пишут код для создания этой последней тестовой передачи.
  • Осуществляют рефакторинг беспощадно в области под тестами для улучшения дизайна.
  • Повторение для каждого нового изменения, на котором необходимо внести в систему отсюда. Никакие исключения к этому правилу.
  • Теперь Земля Обетованная : Скоро когда-либо рост островов хорошо протестированного кода начнет появляться. Все больше кода подпало бы под автоматизированный набор тестов, и изменения будут прогрессивно становиться легче сделать. И это вызвано тем, что медленно и конечно базовый дизайн становится более тестируемым.

простым способом был мой предыдущий ответ. Это - трудный, но правильный выход.

13
ответ дан 30 November 2019 в 12:01
поделиться

На самом деле мы использовали Рациональный Тест Команды, затем Робот, но в недавних обсуждениях с Рациональным мы обнаружили, что у них нет планов поддержать Собственные x64 приложения, фокусирующиеся больше на.NET, таким образом, мы решили переключить инструменты Automated QA. Это является большим, но лицензирующие затраты не позволяют нам включать его для всех разработчиков.

Вся наша поддержка приложений API COM для сценариев, которые мы тест регрессии через VB, но это тестирует API не приложение как таковое.

Идеально мне было бы интересно о том, как люди интегрируют cppunit и подобные платформы поблочного тестирования в приложение на уровне разработчика.

0
ответ дан 30 November 2019 в 12:01
поделиться

Хотя это не может обработать сторону UI, я тест единицы код MFC, пользующийся библиотекой Boost Test. Существует статья Code Project о начале работы:

Разрабатывающие Устойчивые Объекты с Повышением

2
ответ дан 30 November 2019 в 12:01
поделиться

Хотя не прекрасный, лучшее я нашел для этого, AutoIt http://www.autoitscript.com/autoit3

"AutoIt v3, бесплатное программное обеспечение подобный ОСНОВНОМУ язык сценариев, разработанный для автоматизации Windows GUI и общих сценариев. Это использует комбинацию моделируемых нажатий клавиш, движения мыши и управления окном/управлением для автоматизации задач, способом не возможных или надежных с другими языками (например, VBScript и SendKeys). AutoIt является также очень небольшим, автономным и будет работать на всех версиях Windows out-of-the-box без раздражающего требуемого "времени выполнения"!"

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

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

Мое чувство состоит в том, что в разработке нового приложения я настоял бы на последовательном способе сигнализировать "ГОТОВЫЙ". Это было бы полезно пользователям - людям, а также сценариям тестирования! Это может быть проблемой для унаследованного приложения, но возможно можно представить его в проблематичных точках и медленно распространять его к целому приложению, в то время как обслуживание продолжается.

3
ответ дан 30 November 2019 в 12:01
поделиться

Хорошо у нас есть одно из этих огромных Приложений MFC на рабочем месте. Это - гигантская боль для поддержания, или расширяться... это - огромный комок грязи теперь, но это загребает moolah. Так или иначе

  • Мы используем Рациональный Робот для того, чтобы сделать испытания с помощью дыма и т.п..
  • Другой подход, который имел некоторый успех, должен создать маленький определенный для продукта язык и тесты сценария что VBScript использования и некоторый дескриптор Управления, шпионя волшебство. Превратите общие действия в команды.. например, OpenDatabase был бы командой, которая в свою очередь введет необходимые блоки сценария для нажатия на Main Menu> File> "Open...". Вы затем создаете листы Excel, которые являются рядом таких команд. Эти команды могут взять параметры также. Что-то как ПРИГОДНЫЙ Тест.. но больше работы. После того как у Вас есть большинство общих определенных команд и готовые сценарии. Это - выбор, и соберите сценарии (отмеченный CommandIDs) для записи новых тестов. Исполнитель тестов анализирует эти листы Excel, комбинирует все небольшие блоки сценария в сценарий тестирования и выполняет его.

    1. OpenDatabase "C:\tests\MyDB"
    2. OpenDialog, "Добавляют Модель"
    3. AddModel "M0001", "MyModel", 2.5, 100
    4. PressOK
    5. SaveDatabase

HTH

1
ответ дан 30 November 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: