Модульные тесты в Visual Studio 2010 - PullRequest
2 голосов
/ 26 мая 2010

Я пытаюсь создать модульный тест для WinForm в проекте Visual Studio 2010. Я добавляю новый «Тест закодированного пользовательского интерфейса» в свой проект, открываю файл кода, затем щелкните правой кнопкой мыши и выберите «Создать код для теста закодированного пользовательского интерфейса» -> «Использовать построитель закодированного теста пользовательского интерфейса». Затем я запускаю свое приложение, выбираю «Запись» в элементе управления UI Map. Я запускаю свои тесты (в этом случае просто выберите текстовое поле, введите случайное значение, нажмите кнопку). Затем я выбираю «Сгенерировать код» в элементе управления UI Map, который генерирует код, который будет использовать тест. При запуске этого теста я получаю ошибку:

Метод испытания HelloWorldTest.CodedUITest1.CodedUITestMethod1 бросил исключение: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: При воспроизведении не удалось найти контроль с заданным поиском свойства. Дополнительные детали: Название технологии: MSAA ControlType: 'Window' Имя: 'Form1' ClassName: 'WindowsForms10.Window' ---> System.Runtime.InteropServices.COMException: Ошибка HRESULT E_FAIL была возвращена от вызова к компоненту COM.

Кто-нибудь знает, где я иду не так?

Спасибо

1 Ответ

1 голос
/ 27 апреля 2011

Я считаю, что ваша проблема с заголовком окна. Вы видите, что Visual Studio будет давать заголовок окна каждому новому окну, созданному в вашем приложении. Когда вы записывали свой тест, заголовок вашего окна был «Form1». Так говорится в вашем сообщении об ошибке:

ControlType: 'Window' Имя: 'Form1'

Итак, вам нужно определить, переименовывает ли ваше окно окно каждый раз, когда открывается новое окно (скорее всего, так и есть). Например, если вы откроете второе окно, оно может называться «Form2».

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

Единственный способ решить эту проблему - установить заголовок окна вручную, если я знаю, что оно изменилось или изменится.

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear();
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale");

Как видите, я просто очищаю все значения в свойстве WindowTitles элемента управления, затем добавляю правильный заголовок, который, как я знаю, должен быть. В приведенном выше примере это организовано следующим образом:

this. (Имя вашего файла uimap). (Имя вашего окна). (Имя документа в окне). (Имя определенного элемента управления (поле со списком, переключатель, текстовое поле и т. Д.)). WindowTitles . (очистить или добавить) ();

Этот код может идти прямо в кодированном тестовом файле пользовательского интерфейса или если вы хотите использовать частичный класс UIMap.cs (тот, который не генерируется автоматически, UIMap.Designer.cs - автоматически генерируемый) для внесения изменений в UIMap. Просто не забудьте удалить «.UIMap», если вы выберете последнее.

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