VB.net NUnit (2.5) Тестирование форм Windows - возможно ли это - PullRequest
1 голос
/ 18 октября 2011

Я переоборудую юнит-тестирование в довольно сложную систему, разработанную и написанную другими разработчиками на VB.net. Я пытаюсь разработать модульные тесты для форм GUI, используя NUnit и расширение NUnit Forms. (Я смотрел на примеры c #, которые довольно легко переносить, если у вас есть решение, но вы не знаете синтаксис VB, если он использует классы NUnit)

Я попытаюсь объяснить, что я делаю, но сначала краткое описание программы. Он в основном контролирует активность сервера. Вам необходимо подключиться к серверу через модальную форму с полями IP и Port (среди прочих). После подключения к серверу другие части программы разблокируются и становятся доступными (например, конфигурация сервера).

Требуемый процесс: загрузка программы> нажмите кнопку подключения> загрузка формы модального подключения> введите сведения> нажмите кнопку ОК, чтобы подключиться> обновления главной формы для входа в систему> другие функции

Проблема в том, что я не могу проверить функциональность формы подключения, а затем функциональность программы, вошедшей в систему. Я могу проверить, что он загружает модальную форму подключения правильно; вводит детали и нажимает ОК (пока все в порядке), но, похоже, логически не прогрессирует программу. Модальная форма просто снова закрывается, по-видимому, без запуска кода подключения из серверной части программы, и я снова в главном меню, ни к чему не подключился.

У меня такое ощущение, что я либо пропустил что-то действительно очевидное, либо это просто невозможно в NUnit. Я бродил по интернету в поисках чего-то подобного, но самым близким был еще один SO-поток, который был действительно общим. Не имея возможности реально протестировать зарегистрированную версию программы, я нахожусь в серьезном затруднении. Другой проблемой является обработка окон сообщений, которые не имеют уникальных идентификаторов (например, «вы уверены, что хотите выйти?»); это также, кажется, главная боль в заднице с NUnit

(Если это имеет какое-то значение, я запускаю тесты как отдельный проект, используя ссылку на исполняемый файл построенного проекта, а не на фактический источник)

При необходимости можете опубликовать мой тестовый код.

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

ИМХО, лучший способ сделать классы GUI выполнимыми для модульных тестов - это применить шаблон Model-View-Presenter и отделить почти каждую программную логику из класса формы (= View) в отдельный Presenter. учебный класс. Затем вы можете выполнить модульное тестирование класса Presenter без необходимости использования таких инструментов, как «NUnit Forms».

Прочтите Статья Майкла Фезерса "Диалоговое окно смирения" для примера на C ++, вы можете легко применить это к Winforms, я думаю.

0 голосов
/ 18 октября 2011

Я не уверен насчет форм NUnit, но с помощью библиотеки White (которая также работает с NUnit) вы можете протестировать приложение, запустив exe и имитируя действия пользователя.Приложение работает нормально, поэтому выполняется вся логика приложения.

Вот пример кода для запуска приложения с белым:

Dim app = White.Core.Application.Launch("MyApp.exe")

Доступ к форме из вашего приложения:

Dim mainForm = app.GetWindow(SearchCriteria.ByAutomationId("MainForm"), 
                             InitializeOption.NoCache)

Выполнение действия, такого как нажатие на элемент меню:

mainForm.MenuBar.MenuItem("Edit", "Jobs...").Click()

Получение элемента управления и проверка его состояния:

Dim someTextBox = mainForm.Get(Of TextBox)(SearchCriteria.ByAutomationId("txtValue"))
Assert.IsTrue(someTextBox.Text = "12345")

Я не уверен, что NUnit Forms имеет аналогичные возможности, но если нет, может быть, вы должны посмотреть на белых.Я столкнулся с некоторыми проблемами при настройке, поэтому обязательно внимательно прочитайте документацию (к сожалению, не очень исчерпывающую) перед настройкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...