Тестирование крупного приложения с несколькими картами пользовательского интерфейса
В этом разделе рассматривается использование закодированных тестов пользовательского интерфейса при тестировании большого приложения с помощью нескольких карт пользовательского интерфейса.
При создании нового закодированного теста пользовательского интерфейса среда тестирования Visual Studio создает код для теста по умолчанию в классе UIMap. Дополнительные сведения о записи закодированных тестов пользовательского интерфейса см. в разделах Практическое руководство. Создание закодированного теста пользовательского интерфейса и Составляющие закодированного теста пользовательского интерфейса.
Сформированный код карты пользовательского интерфейса содержит класс для каждого объекта, с которым взаимодействует тест. Для параметров каждого сформированного метода специально создается отдельный вспомогательный класс. Если в приложении содержится большое число объектов, страниц, форм и элементов управления, размер карты пользовательского интерфейса может значительно возрасти. Кроме того, если с тестом работает несколько пользователей, то приложение с одним большим файлом карты пользовательского интерфейса становится слишком громоздким.
Использование нескольких файлов карты пользовательского интерфейса может обеспечить следующие преимущества.
Каждая карта может быть связана с логическим подмножеством приложения. Благодаря этому упрощается управление изменениями.
Каждый тест-инженер может работать с одним разделом приложения и возвращать свой код, не мешая остальным тест-инженерам, которые работают с другими разделами приложения.
Добавления пользовательского интерфейса приложения можно реализовывать последовательно с минимальным влиянием на тесты других частей пользовательского интерфейса.
Необходимость использования нескольких карт пользовательского интерфейса
Несколько карт пользовательского интерфейса следует создавать в каждом из следующих типов ситуаций.
Несколько сложных наборов составных элементов управления пользовательского интерфейса, которые совместно выполняют одну логическую операцию, например страницу регистрации на веб-сайте или страницу покупки для покупательской корзины.
Независимый набор элементов управления, доступ к которым осуществляется из различных точек приложения, как, например, в мастере с несколькими страницами операций. Если все страницы мастера характеризуются особенной сложностью, можно создать отдельную карту пользовательского интерфейса для каждой страницы.
Добавление нескольких карт пользовательского интерфейса
Добавление карты пользовательского интерфейса в проект
Чтобы создать в тестовом проекте папку, в которой будут храниться все карты пользовательского интерфейса, в обозревателе решений щелкните правой кнопкой мыши файл тестового проекта, выберите команду Добавить и щелкните пункт Новая папка. Эту папку можно назвать, например, UIMaps.
Новая папка отображается внутри папки тестового проекта.
Щелкните правой кнопкой мыши папку UIMaps, выберите команду Добавить и щелкните пункт Новый элемент.
Откроется диалоговое окно Добавление нового элемента.
Примечание
Добавление новой карты закодированного теста пользовательского интерфейса выполняется только из тестового проекта.
Выберите в списке значение Карта кодированного теста ИП.
В поле Имя введите имя новой карты пользовательского интерфейса. Используйте имя компонента или страницы, которую представляет данная карта, например HomePageMap.
Нажмите кнопку Добавить.
Окно Visual Studio сворачивается, и открывается диалоговое окно Построитель кодированных тестов ИП.
Запишите действия для первого метода и щелкните Сформировать код.
Завершив запись всех действий и утверждений для первого компонента или страницы и сгруппировав их в методы, закройте диалоговое окно Построитель кодированных тестов ИП.
Продолжите создание карт пользовательского интерфейса. Запишите действия и утверждения для каждого компонента, сгруппируйте их в методы, а затем сформируйте код.
Во многих случаях окно приложения верхнего уровня остается неизменным для всех мастеров, форм и страниц. Хотя каждая карта пользовательского интерфейса содержит класс для окна верхнего уровня, все карты, скорее всего, ссылаются на одно окно верхнего уровня, в котором выполняются все компоненты приложения. Закодированные тесты пользовательского интерфейса выполняют поиск элементов управления в иерархическом порядке, начиная с окна верхнего уровня, поэтому в сложных приложениях реальное окно верхнего уровня может дублироваться в каждой карте пользовательского интерфейса. В случае дублирования реального окна верхнего уровня изменение этого окна приведет к нескольким изменениям. Это может вызывать проблемы производительности при переключении между картами пользовательского интерфейса.
Чтобы свести последствия дублирования к минимуму, можно использовать метод CopyFrom(), который обеспечивает совпадение окна верхнего уровня в отдельной карте пользовательского интерфейса с главным окном верхнего уровня.
Пример
Следующий пример является фрагментом служебного класса, предоставляющего доступ к каждому компоненту и его дочерним элементам управления, которые представлены классами, сформированными в различных картах пользовательского интерфейса.
В этом примере веб-приложение Contoso содержит домашнюю страницу, страницу продуктов и страницу покупательской корзины. Для каждой из этих страниц предусмотрено общее окно верхнего уровня, которое является окном браузера. Для каждой страницы имеется карта пользовательского интерфейса, и служебный класс состоит из кода, аналогичного следующему:
using ContosoProject.UIMaps;
using ContosoProject.UIMaps.HomePageClasses;
using ContosoProject.UIMaps.ProductPageClasses;
using ContosoProject.UIMaps.ShoppingCartClasses;
namespace ContosoProject
{
public class TestRunUtility
{
// Private fields for the properties
private HomePage homePage = null;
private ProductPage productPage = null;
private ShoppingCart shoppingCart = null;
public TestRunUtility()
{
homePage = new HomePage();
}
// Properties that get each UI Map
public HomePage HomePage
{
get { return homePage; }
set { homePage = value; }
}
// Gets the ProductPage from the ProductPageMap.
public ProductPage ProductPageObject
{
get
{
if (productPage == null)
{
// Instantiate a new page from the UI Map classes
productPage = new ProductPage();
// Since the Product Page and Home Page both use
// the same browser page as the top level window,
// get the top level window properties from the
// Home Page.
productPage.UIContosoFinalizeWindow.CopyFrom(
HomePage.UIContosoWindowsIWindow);
}
return productPage;
}
}
// Continue to create properties for each page, getting the
// page object from the corresponding UI Map and copying the
// top level window properties from the Home Page.
}
См. также
Задачи
Практическое руководство. Создание закодированного теста пользовательского интерфейса
Ссылки
Другие ресурсы
Составляющие закодированного теста пользовательского интерфейса