Поделиться через


Тестирование крупного приложения с несколькими картами пользовательского интерфейса

В этом разделе рассматривается использование закодированных тестов пользовательского интерфейса при тестировании большого приложения с помощью нескольких карт пользовательского интерфейса.

При создании нового закодированного теста пользовательского интерфейса среда тестирования Visual Studio создает код для теста по умолчанию в классе UIMap. Дополнительные сведения о записи закодированных тестов пользовательского интерфейса см. в разделах Практическое руководство. Создание закодированного теста пользовательского интерфейса и Составляющие закодированного теста пользовательского интерфейса.

Сформированный код карты пользовательского интерфейса содержит класс для каждого объекта, с которым взаимодействует тест. Для параметров каждого сформированного метода специально создается отдельный вспомогательный класс. Если в приложении содержится большое число объектов, страниц, форм и элементов управления, размер карты пользовательского интерфейса может значительно возрасти. Кроме того, если с тестом работает несколько пользователей, то приложение с одним большим файлом карты пользовательского интерфейса становится слишком громоздким.

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

  • Каждая карта может быть связана с логическим подмножеством приложения. Благодаря этому упрощается управление изменениями.

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

  • Добавления пользовательского интерфейса приложения можно реализовывать последовательно с минимальным влиянием на тесты других частей пользовательского интерфейса.

Необходимость использования нескольких карт пользовательского интерфейса

Несколько карт пользовательского интерфейса следует создавать в каждом из следующих типов ситуаций.

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

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

Добавление нескольких карт пользовательского интерфейса

Добавление карты пользовательского интерфейса в проект

  1. Чтобы создать в тестовом проекте папку, в которой будут храниться все карты пользовательского интерфейса, в обозревателе решений щелкните правой кнопкой мыши файл тестового проекта, выберите команду Добавить и щелкните пункт Новая папка. Эту папку можно назвать, например, UIMaps.

    Новая папка отображается внутри папки тестового проекта.

  2. Щелкните правой кнопкой мыши папку UIMaps, выберите команду Добавить и щелкните пункт Новый элемент.

    Откроется диалоговое окно Добавление нового элемента.

    Примечание

    Добавление новой карты закодированного теста пользовательского интерфейса выполняется только из тестового проекта.

  3. Выберите в списке значение Карта кодированного теста ИП.

    В поле Имя введите имя новой карты пользовательского интерфейса. Используйте имя компонента или страницы, которую представляет данная карта, например HomePageMap.

  4. Нажмите кнопку Добавить.

    Окно Visual Studio сворачивается, и открывается диалоговое окно Построитель кодированных тестов ИП.

  5. Запишите действия для первого метода и щелкните Сформировать код.

  6. Завершив запись всех действий и утверждений для первого компонента или страницы и сгруппировав их в методы, закройте диалоговое окно Построитель кодированных тестов ИП.

  7. Продолжите создание карт пользовательского интерфейса. Запишите действия и утверждения для каждого компонента, сгруппируйте их в методы, а затем сформируйте код.

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

Чтобы свести последствия дублирования к минимуму, можно использовать метод 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.
}

См. также

Задачи

Практическое руководство. Создание закодированного теста пользовательского интерфейса

Ссылки

UIMap

CopyFrom

Другие ресурсы

Составляющие закодированного теста пользовательского интерфейса