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


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

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

Требования

  • Visual Studio Ultimate, Visual Studio Premium

Содержимое закодированного теста пользовательского интерфейса

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

Файл

Содержимое

Возможность изменения

UIMap.Designer.cs

Раздел объявлений

Класс UIMap (разделяемый, создается автоматически)

Методы

Свойства

Нет

UIMap.cs

Класс UIMap (разделяемый)

Да

CodedUITest1.cs

Класс CodedUITest1

Методы

Свойства

Да

UIMap.uitest

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

Нет

Ff398062.collapse_all(ru-ru,VS.110).gifUIMap.Designer.cs

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

Ff398062.collapse_all(ru-ru,VS.110).gifРаздел объявлений

Этот раздел содержит следующие объявления для пользовательского интерфейса Windows.

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Input;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
using Mouse = Microsoft.VisualStudio.TestTools.UITesting.Mouse;
using MouseButtons = System.Windows.Forms.MouseButtons;

Пространство имен Microsoft.VisualStudio.TestTools.UITesting.WinControls включено для пользовательского интерфейса Windows.Для пользовательского интерфейса веб-страниц используется пространство имен Microsoft.VisualStudio.TestTools.UITesting.HtmlControls, для пользовательского интерфейса Windows Presentation Foundation — пространство имен Microsoft.VisualStudio.TestTools.UITesting.WpfControls.

Ff398062.collapse_all(ru-ru,VS.110).gifКласс UIMap

Следующий раздел файла — это класс UIMap.

[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]
public partial class UIMap

Код класса начинается с атрибута GeneratedCodeAttribute, применяемого к данному классу, который объявляется как разделяемый.Можно заметить, что этот атрибут также применяется ко всем классам в данном файле.Еще один файл, который содержит дополнительный код для данного класса, — UIMap.cs — будет рассмотрен позднее.

Сформированный класс UIMap содержит код для каждого метода, указанного при записи теста.

public void LaunchCalculator()
public void AddItems()
public void VerifyTotal()
public void CleanUp()

Эта часть класса UIMap также включает сформированный код для каждого свойства, необходимого для методов.

public virtual LaunchCalculatorParams LaunchCalculatorParams
public virtual AddItemsParams AddItemsParams
public virtual VerifyTotalExpectedValues VerifyTotalExpectedValues
public virtual CalculateItemsParams CalculateItemsParams
public virtual VerifyMathAppTotalExpectedValues 
    VerifyMathAppTotalExpectedValues
public UIStartMenuWindow UIStartMenuWindow
public UIRunWindow UIRunWindow
public UICalculatorWindow UICalculatorWindow
public UIStartWindow UIStartWindow
public UIMathApplicationWindow UIMathApplicationWindow

Ff398062.collapse_all(ru-ru,VS.110).gifМетоды UIMap

Структура каждого метода аналогична методу AddItems().В нижней части кода, который для большей ясности представлен с использованием разрывов строк, приведено подробное его объяснение.

/// <summary>
/// AddItems - Use 'AddItemsParams' to pass parameters into this method.
/// </summary>
public void AddItems()
{
    #region Variable Declarations
    WinControl uICalculatorDialog = 
        this.UICalculatorWindow.UICalculatorDialog;
    WinEdit uIItemEdit = 
        this.UICalculatorWindow.UIItemWindow.UIItemEdit;
    #endregion

    // Type '{NumPad7}' in 'Calculator' Dialog
    Keyboard.SendKeys(uICalculatorDialog, 
        this.AddItemsParams.UICalculatorDialogSendKeys, 
        ModifierKeys.None);

    // Type '{Add}{NumPad2}{Enter}' in 'Unknown Name' text box
    Keyboard.SendKeys(uIItemEdit, 
        this.AddItemsParams.UIItemEditSendKeys, 
        ModifierKeys.None);
}

В сводном комментарии для каждого метода указывается, какой класс следует использовать для значений параметров этого метода.В данном случае используется класс AddItemsParams, который определяется далее в файле UIMap.cs. Этот класс принадлежит типу значений, возвращаемый свойством AddItemsParams.

В верхней части кода метода расположена область Variable Declarations, в которой определяются локальные переменные для объектов пользовательского интерфейса, которые будут использоваться данным методом.

В этом методе доступ к свойствам UIItemWindow и UIItemEdit осуществляется с помощью класса UICalculatorWindow, который определяется позднее в файле UIMap.cs.

Далее идут строки, которые отправляют текст с клавиатуры в приложение Калькулятор с помощью свойств объекта AddItemsParams.

Метод VerifyTotal() содержит очень похожую структуру и включает следующий код утверждения.

// Verify that 'Unknown Name' text box's property 'Text' equals '9. '
Assert.AreEqual(
    this.VerifyTotalExpectedValues.UIItemEditText, 
    uIItemEdit.Text);

Имя текстового поля указано как неизвестное, поскольку разработчик приложения Калькулятор Windows не предоставил общедоступного имени для данного элемента управления.Если фактическое значение не равно ожидаемому значению, выполнение метода Assert.AreEqual завершается ошибкой, что приводит к сбою теста.Обратите также внимание, что ожидаемое значение содержит десятичную точку, за которой следует пробел.Если когда-либо потребуется изменить функциональные возможности данного конкретного теста, необходимо разрешить десятичную точку и пробел.

Ff398062.collapse_all(ru-ru,VS.110).gifСвойства UIMap

Код каждого свойства также является стандартным во всех частях класса.Следующий код свойства AddItemsParams используется в методе AddItems().

public virtual AddItemsParams AddItemsParams
{
    get
    {
        if ((this.mAddItemsParams == null))
        {
            this.mAddItemsParams = new AddItemsParams();
        }
        return this.mAddItemsParams;
    }
}

Обратите внимание, что свойство использует закрытую локальную переменную mAddItemsParams для хранения значения перед его возвращением.Имена свойства и класса для возвращаемого свойством объекта совпадают.Этот класс определяется позднее в файле UIMap.cs.

Каждый возвращаемый свойством класс имеет аналогичную структуру.Ниже приведен код класса AddItemsParams.

/// <summary>
/// Parameters to be passed into 'AddItems'
/// </summary>
[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]
public class AddItemsParams
{
    #region Fields
    /// <summary>
    /// Type '{NumPad7}' in 'Calculator' Dialog
    /// </summary>
    public string UICalculatorDialogSendKeys = "{NumPad7}";

    /// <summary>
    /// Type '{Add}{NumPad2}{Enter}' in 'Unknown Name' text box
    /// </summary>
    public string UIItemEditSendKeys = "{Add}{NumPad2}{Enter}";
    #endregion
}

Как и все классы в файле UIMap.cs, данный класс начинается с атрибута GeneratedCodeAttribute.В этом небольшом классе имеется область Fields, в которой определяются строки, используемые в качестве параметров для метода Keyboard.SendKeys, применяемого в методе UIMap.AddItems(). Этот последний метод рассматривается ниже.Можно написать код для замены значений в этих строковых полях до вызова метода, в котором используются данные параметры.

Ff398062.collapse_all(ru-ru,VS.110).gifUIMap.cs

По умолчанию этот файл содержит разделяемый класс UIMap, в котором нет методов и свойств.

Ff398062.collapse_all(ru-ru,VS.110).gifКласс UIMap

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

Все части класса UIMap могут использовать методы и свойства из других частей класса UIMap.

Ff398062.collapse_all(ru-ru,VS.110).gifCodedUITest1.cs

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

Ff398062.collapse_all(ru-ru,VS.110).gifКласс CodedUITest1

По умолчанию этот файл содержит определение только для одного класса.

[CodedUITest]
public class CodedUITest1

Атрибут T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute автоматически применяется к данному классу; благодаря этому среда тестирования распознает его как расширение теста.Также обратите внимание, что это не разделяемый класс.В этом файле содержится весь код класса.

Ff398062.collapse_all(ru-ru,VS.110).gifСвойства класса CodedUITest1

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

/// <summary>
/// Gets or sets the test context which provides
/// information about and functionality for the current test run.
///</summary>
public TestContext TestContext
public UIMap UIMap

Ff398062.collapse_all(ru-ru,VS.110).gifМетоды класса CodedUITest1

По умолчанию класс содержит только один метод.

public void CodedUITestMethod1()

Этот метод вызывает каждый метод UIMap, указанный при записи теста, как описано в разделе Класс UIMap.

Область Additional test attributes, если снять с нее комментарий, содержит два дополнительных метода.

// Use TestInitialize to run code before running each test 
[TestInitialize()]
public void MyTestInitialize()
{
    // To generate code for this test, select "Generate Code for Coded 
    // UI Test" from the shortcut menu and select one of the menu items.
    // For more information on generated code, see 
    // https://go.microsoft.com/fwlink/?LinkId=179463

    // You could move this line from the CodedUITestMethod1() method
    this.UIMap.LaunchCalculator();
}

// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyTestCleanup()
{
    // To generate code for this test, select "Generate Code for Coded 
    // UI Test" from the shortcut menu and select one of the menu items.
    // For more information on generated code, see 
    // https://go.microsoft.com/fwlink/?LinkId=179463

    // You could move this line from the CodedUITestMethod1() method
    this.UIMap.CloseCalculator();
}

Метод MyTestInitialize() содержит применяемый к нему атрибут TestInitializeAttribute, который указывает среде тестирования вызывать данный метод до всех остальных методов теста.Аналогичным образом, метод MyTestCleanup() содержит применяемый к нему атрибут TestCleanupAttribute, который указывает среде тестирования вызывать данный метод после вызова всех других методов.Эти методы можно не использовать.Для данного теста метод UIMap.LaunchCalculator() можно вызывать из метода MyTestInitialize(), а метод UIMap.CloseCalculator() — из метода MyTestCleanup(), а не CodedUITest1Method1().

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

Ff398062.collapse_all(ru-ru,VS.110).gifUIMap.uitest

Этот XML-файл представляет структуру записи закодированного теста пользовательского интерфейса и всех ее частей.Сюда входят действия и классы, а также методы и свойства этих классов.Файл UIMap.Designer.cs содержит код, сформированный построителем закодированных тестов пользовательского интерфейса для воспроизведения структуры теста, и обеспечивает подключение к среде тестирования.

Непосредственное изменение файла UIMap.uitest невозможно.Однако с помощью построителя закодированных тестов пользовательского интерфейса можно изменить тест, что приведет к автоматическому изменению файлов UIMap.uitest и UIMap.Designer.cs.

См. также

Ссылки

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

Основные понятия

Проверка кода с помощью закодированных тестов пользовательского интерфейса

Рекомендации по выполнению закодированных тестов пользовательского интерфейса

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

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

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

Создание закодированных тестов пользовательского интерфейса