Freigeben über


Anatomy of a Coded UI Test

Wenn Sie in einem Testprojekt einen Test der codierten UI erstellen, werden der Projektmappe mehrere Dateien hinzugefügt. In diesem Thema untersuchen wir diese Dateien anhand eines Beispieltests der codierten UI.

Inhalt eines Tests der codierten UI

Wenn Sie einen Test der codierten UI erstellen, erstellt der Test-Generator für codierte UI eine Zuordnung der getesteten Benutzeroberfläche (UI) sowie die Testmethoden, Parameter und Assertionen für alle Tests. Zudem wird eine Klassendatei für jeden Test erstellt.

Datei

Inhalt

Bearbeitbar?

UIMap.Designer.cs

Deklarationsbereich

UIMap-Klasse (partiell, automatisch generiert)

Methoden

Eigenschaften

Nein

UIMap.cs

UIMap-Klasse (partiell)

Ja

CodedUITest1.cs

CodedUITest1-Klasse

Methoden

Eigenschaften

Ja

UIMap.uitest

Die XML-Zuordnung der Benutzeroberfläche für den Test.

Nein

UIMap.Designer.cs

Diese Datei enthält Code, der beim Erstellen eines Tests automatisch vom Test-Generator für codierte UI erstellt wird. Diese Datei wird jedes Mal neu erstellt, wenn ein Test geändert wird. In dieser Datei kann daher kein Code hinzugefügt oder geändert werden.

Deklarationsbereich

Dieser Abschnitt enthält die folgenden Deklarationen für eine Windows-Benutzeroberfläche.

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;

Der Microsoft.VisualStudio.TestTools.UITesting.WinControls-Namespace dient für eine Windows-Benutzeroberfläche. Für eine Webseiten-Benutzeroberfläche wird der Microsoft.VisualStudio.TestTools.UITesting.HtmlControls-Namespace verwendet und für eine Windows Presentation Foundation-Benutzeroberfläche der Microsoft.VisualStudio.TestTools.UITesting.WpfControls-Namespace.

UIMap-Klasse

Der nächste Abschnitt der Datei ist die UIMap-Klasse.

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

Der Klassencode beginnt mit einem GeneratedCodeAttribute, das auf die als partielle Klasse deklarierte Klasse angewendet wird. Wie Sie sehen werden, wird das Attribut auch auf jede Klasse in dieser Datei angewendet. Die andere Datei, die weiteren Code für diese Klasse enthalten kann, ist UIMap.cs. Diese Datei wird an späterer Stelle erläutert.

Die generierte UIMap-Klasse enthält Code für jede Methode, die beim Aufzeichnen des Tests angegeben wurde.

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

Dieser Teil der UIMap-Klasse enthält auch den generierten Code für jede Eigenschaft, die für die Methoden erforderlich ist.

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

UIMap-Methoden

Jede Methode verfügt über eine Struktur, die der AddItems()-Methode ähnelt. Dies wird in Anschluss an den Code, der aus Gründen der Übersichtlichkeit mit Zeilenumbrüchen dargestellt ist, ausführlicher erläutert.

/// <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);
}

Der Zusammenfassungskommentar für die einzelnen Methodendefinitionen gibt Aufschluss darüber, welche Klasse für Parameterwerte dieser Methode verwendet wird. In diesem Fall ist dies die AddItemsParams-Klasse, die weiter unten in der Datei UIMap.cs definiert wird. Dies ist auch der Werttyp, der von der AddItemsParams-Eigenschaft zurückgegeben wird.

Am Anfang des Methodencodes befindet sich ein Bereich Variable Declarations, in dem lokale Variablen für die von der Methode verwendeten UI-Objekte definiert werden.

In dieser Methode sind sowohl UIItemWindow als auch UIItemEdit Eigenschaften, auf die mit der weiter unten in der Datei UIMap.cs definierten UICalculatorWindow-Klasse zugegriffen wird.

In den nächsten Zeilen wird mit Eigenschaften des AddItemsParams-Objekts Text von der Tastatur an die Rechneranwendung gesendet.

Die VerifyTotal()-Methode verfügt über eine sehr ähnliche Struktur und enthält den folgenden Assertionscode.

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

Der Textfeldname wird als unbekannt aufgeführt, da der Entwickler der Windows-Rechneranwendung keinen öffentlich verfügbaren Namen für das Steuerelement bereitgestellt hat. Die Assert.AreEqual-Methode schlägt fehl, wenn der tatsächliche Wert nicht dem erwarteten Wert entspricht. In diesem Fall würde der Test fehlschlagen. Beachten Sie außerdem, dass der erwartete Wert ein Dezimaltrennzeichen gefolgt von einem Leerzeichen enthält. Wenn Sie die Funktion dieses spezifischen Tests ändern müssen, müssen Sie dieses Dezimaltrennzeichen und das Leerzeichen berücksichtigen.

UIMap-Eigenschaften

Der Code für die einzelnen Eigenschaften ist in der gesamten Klasse ebenfalls weitgehend standardisiert. Der folgende Code für die AddItemsParams-Eigenschaft wird in der AddItems()-Methode verwendet.

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

Die Eigenschaft speichert den Wert in einer privaten lokalen Variable mit dem Namen mAddItemsParams, bevor sie ihn zurückgibt. Der Eigenschaftsname und der Klassenname für das zurückgegebene Objekt sind identisch. Die Klasse wird weiter unten in der Datei UIMap.cs definiert.

Alle von einer Eigenschaft zurückgegebenen Klassen sind ähnlich strukturiert. Das folgende Beispiel zeigt die AddItemsParams-Klasse.

/// <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
}

Wie alle Klassen in der Datei UIMap.cs beginnt diese Klasse mit dem GeneratedCodeAttribute. Diese kleine Klasse enthält einen Bereich Fields, in dem die Zeichenfolgen definiert sind, die als Parameter für die Keyboard.SendKeys-Methode in der zuvor erläuterten UIMap.AddItems()-Methode verwendet werden. Sie können vor dem Aufruf der Methode, in der diese Parameter verwendet werden, Code schreiben, um die Werte in diesen Zeichenfolgenfeldern zu ersetzen.

UIMap.cs

Standardmäßig enthält diese Datei eine partielle UIMap-Klasse ohne Methoden oder Eigenschaften.

UIMap-Klasse

In dieser Klasse können Sie benutzerdefinierten Code erstellen, um die Funktion der UIMap-Klasse zu erweitern. Der in dieser Datei erstellte Code wird nicht bei jeder Änderung eines Tests vom Test-Generator für codierte UI erneut generiert.

In allen Teilen der UIMap-Klasse können die Methoden und Eigenschaften aus einem beliebigen anderen Teil der UIMap-Klasse verwendet werden.

CodedUITest1.cs

Diese Datei wird vom Test-Generator für codierte UI generiert, aber nicht bei jeder Änderung des Tests neu erstellt. Der Code in dieser Datei kann daher geändert werden. Der Name der Datei wird auf Grundlage des Namens generiert, den Sie beim Erstellen für den Test angegeben haben.

CodedUITest1-Klasse

Standardmäßig enthält diese Datei nur die Definition für eine Klasse.

[CodedUITest]
public class CodedUITest1

Das "T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute" wird automatisch auf die Klasse angewendet, sodass sie vom Testframework als Testerweiterung erkannt werden kann. Dies ist keine partielle Klasse. Der gesamte Klassencode ist in dieser Datei enthalten.

CodedUITest1-Eigenschaften

Die Klasse enthält zwei Standardeigenschaften, die sich am Ende der Datei befinden. Sie müssen nicht geändert werden.

/// <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

CodedUITest1-Methoden

Standardmäßig enthält die Klasse nur eine Methode.

public void CodedUITestMethod1()

Diese Methode ruft jede UIMap-Methode auf, die Sie beim Aufzeichnen des Tests angegeben haben. Informationen dazu finden Sie im Abschnitt zur UIMap-Klasse.

Ein Bereich mit dem Titel Additional test attributes sofern die Auskommentierung aufgehoben wurde, enthält zwei optionale Methoden.

// 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();
}

Der MyTestInitialize()-Methode ist das TestInitializeAttribute zugewiesen, wodurch das Testframework angewiesen wird, diese Methode vor allen anderen Testmethoden aufzurufen. Desgleichen ist der MyTestCleanup()-Methode das TestCleanupAttribute zugewiesen, wodurch das Testframework angewiesen wird, diese Methode nach allen anderen Testmethoden aufzurufen. Die Verwendung dieser Methoden ist optional. Für diesen Test könnte die UIMap.LaunchCalculator()-Methode anstelle von CodedUITest1Method1() von MyTestInitialize() aufgerufen werden und die UIMap.CloseCalculator()-Methode von MyTestCleanup().

Wenn Sie dieser Klasse weitere Methoden mit dem CodedUITestAttribute hinzufügen, wird im Rahmen des Tests jede Methode vom Testframework aufgerufen.

UIMap.uitest

Dies ist eine XML-Datei, die die Struktur der Aufzeichnung des Tests der codierten UI und all seiner Teile darstellt. Dies beinhaltet die Aktionen und Klassen sowie die Methoden und Eigenschaften dieser Klassen. Die Datei UIMap.Designer.cs enthält den Code, der vom Generator für codierte UI generiert wird, um die Struktur des Tests zu reproduzieren, und stellt die Verbindung mit dem Testframework bereit.

Die Datei UIMap.uitest kann nicht direkt bearbeitet werden. Sie können den Test jedoch mit dem Generator für codierte UI ändern, wodurch die Dateien UIMap.uitest und UIMap.Designer.cs automatisch geändert werden.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Tests für codierte UI

How to: Add UI Controls and Validation Code Using the Coded UI Test Builder

Referenz

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

Konzepte

Empfohlene Vorgehensweisen für Tests der codierten UI

Unterstützte Konfigurationen und Plattformen für Tests der codierten UI und Aktionsaufzeichnungen

Weitere Ressourcen

Testing a Large Application with Multiple UI Maps