Anatomie d'un test codé de l'interface utilisateur

Lorsque vous créez un test codé de l'interface utilisateur dans un projet de test codé d'interface utilisateur, plusieurs fichiers sont ajoutés à votre solution.Dans cette rubrique, nous utiliserons un exemple de test codé de l'interface utilisateur pour explorer ces fichiers.

Configuration requise

  • Visual Studio Ultimate, Visual Studio Premium

Contenu d'un test codé de l'interface utilisateur

Lorsque vous créez un test codé de l'interface utilisateur, le Générateur de test codé de l'interface utilisateur crée un plan d'interface utilisateur en cours de test, mais aussi les méthodes de test, les paramètres et les assertions pour tous les tests.Il crée également un fichier de classe pour chaque test.

Fichier

Sommaire

Éditable ?

UIMap.Designer.cs

Section des déclarations

Classe UIMap (partielle, générée automatiquement)

Méthodes

Propriétés

Non

UIMap.cs

Classe UIMap (partielle)

Oui

CodedUITest1.cs

Classe CodedUITest1

Méthodes

Propriétés

Oui

UIMap.uitest

Le mappage XML de l'interface utilisateur pour le test.

Non

UIMap.Designer.cs

Ce fichier contient le code créé automatiquement par le Générateur de test codé de l'interface utilisateur lorsqu'un test est créé.Ce fichier est recréé chaque fois qu'un test change, afin que ce ne soit pas un fichier dans lequel vous pouvez ajouter ou modifier du code.

Section des déclarations

Cette section inclut les déclarations suivantes d'une interface utilisateur 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;

L'espace de noms Microsoft.VisualStudio.TestTools.UITesting.WinControls est inclus pour une interface utilisateur (IU) Windows.Pour une interface utilisateur de page Web, l'espace de noms serait Microsoft.VisualStudio.TestTools.UITesting.HtmlControls ; pour une IU Windows Presentation Foundation, l'espace de noms serait Microsoft.VisualStudio.TestTools.UITesting.WpfControls.

Classe UIMap

La section suivante du fichier est la classe UIMap.

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

Le code de la classe démarre avec un GeneratedCodeAttribute qui s'applique à la classe qui est déclarée comme une classe partielle.Vous remarquerez que l'attribut est également appliqué à chaque classe de ce fichier.L'autre fichier qui peut contenir du code ajouté pour cette classe est UIMap.cs, décrite plus loin dans cette rubrique.

La classe UIMap générée inclut le code de chaque méthode spécifiée au moment où le test a été enregistré.

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

Cette partie de la classe UIMap inclut également le code généré pour chaque propriété requise par les méthodes.

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

Méthodes UIMap

Chaque méthode présente une structure qui ressemble à la méthode AddItems().Cela est expliqué de façon plus détaillée sous le code présenté avec les sauts de ligne à des fins de clarté.

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

Le commentaire résumé de chaque définition de méthode indique la classe à utiliser pour les valeurs de paramètre de cette méthode.Dans ce cas, il s'agit de la classe AddItemsParams, définie ultérieurement dans le fichier UIMap.cs et qui est également le type de valeur retourné par la propriété AddItemsParams.

Au début du code de la méthode se trouve une zone Variable Declarations qui définit des variables locales pour les objets IU qui seront utilisés par la méthode.

Dans cette méthode, UIItemWindow et UIItemEdit sont des propriétés accessibles à l'aide de la classe UICalculatorWindow définie ultérieurement dans le fichier UIMap.cs.

Ensuite, se trouvent des lignes qui envoient le texte du clavier vers l'application Calculatrice à l'aide des propriétés de l'objet AddItemsParams.

La méthode VerifyTotal() présente une structure semblable et inclut le code d'assertion suivant.

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

Le nom de la zone de texte est répertorié comme inconnu parce que le développeur de l'application Calculatrice Windows n'a pas fourni de nom disponible publiquement pour ce contrôle.La méthode Assert.AreEqual échoue lorsque la valeur réelle n'est pas égale à la valeur attendue, ce qui peut provoquer l'échec du test.Notez également que la valeur attendue inclut une virgule décimale suivie par un espace.Si vous devez modifier la fonctionnalité de ce test particulier, vous devez tenir compte de cette virgule décimale et de l'espace.

Propriétés UIMap

Le code de chaque propriété est également standard dans toute la classe.Le code suivant de la propriété AddItemsParams est utilisé dans la méthode AddItems().

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

Notez que la propriété utilise une variable locale privée nommée mAddItemsParams pour conserver la valeur avant de la retourner.Le nom de la propriété et le nom de la classe de l'objet qu'elle retourne sont identiques.La classe est décrite plus loin dans le fichier UIMap.cs.

Chaque classe retournée par une propriété est structurée de la même façon.Voici la classe 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
}

Comme avec toutes les classes du fichier UIMap.cs, cette classe démarre avec le GeneratedCodeAttribute.Dans cette petite classe se trouve une zone Fields qui définit les chaînes à utiliser comme paramètres pour la méthode Keyboard.SendKeys utilisée dans la méthode UIMap.AddItems() décrite précédemment.Vous pouvez écrire le code pour remplacer les valeurs dans ces champs String avant l'appel de la méthode dans laquelle ces paramètres sont utilisés.

UIMap.cs

Par défaut, ce fichier contient une classe UIMap partielle qui n'a pas de méthodes, ni propriétés.

Classe UIMap

Il s'agit de l'endroit où vous pouvez créer le code personnalisé pour étendre la fonctionnalité de la classe UIMap.Le code que vous créez dans ce fichier ne sera pas régénéré par le Générateur de test codé de l'interface utilisateur chaque fois qu'un test est modifié.

Toutes les parties de la UIMap peuvent utiliser les méthodes et les propriétés de toute autre partie de la classe UIMap.

CodedUITest1.cs

Ce fichier est généré par le Générateur de test codé de l'interface utilisateur, mais n'est pas recréé chaque fois que le test est modifié, de sorte que vous pouvez modifier le code dans ce fichier.Le nom du fichier est généré à partir du nom que vous avez spécifié pour le test que vous avez créé.

Classe CodedUITest1

Par défaut, ce fichier contient la définition d'une seule classe.

[CodedUITest]
public class CodedUITest1

T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute est appliqué automatiquement à la classe, ce qui permet à l'infrastructure de test de le reconnaître comme une extension de test.Notez également qu'il ne s'agit pas d'une classe partielle.Tout le code de la classe est contenu dans ce fichier.

Propriétés CodedUITest1

La classe contient deux propriétés par défaut qui se trouvent à la fin du fichier.Elles ne doivent pas être modifiées.

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

Méthodes CodedUITest1

Par défaut, la classe contient une seule méthode.

public void CodedUITestMethod1()

Cette méthode appelle chaque méthode UIMap que vous avez spécifiée lorsque vous avez enregistré votre test, ce qui est décrit dans la section sur la classe UIMap.

Une région intitulée Additional test attributes, en cas d'annulation de la mise en commentaire, contient deux méthodes facultatives.

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

TestInitializeAttribute s'applique à la méthode MyTestInitialize(), ce qui permet à l'infrastructure de test d'appeler cette méthode avant toutes les autres méthodes de test.Pareillement, TestCleanupAttribute s'applique à la méthode MyTestCleanup(), qui permet à l'infrastructure de test d'appeler cette méthode après que toutes les autres méthodes de test ont appelées.L'utilisation de ces méthodes est facultative.Pour ce test, la méthode UIMap.LaunchCalculator() pourrait être appelée à partir de MyTestInitialize() et la méthode UIMap.CloseCalculator() depuis MyTestCleanup() au lieu de CodedUITest1Method1().

Si vous ajoutez d'autres méthodes à cette classe à l'aide du CodedUITestAttribute, l'infrastructure de test appelle chaque méthode dans le cadre du test.

UIMap.uitest

Il s'agit d'un fichier XML qui représente la structure de l'enregistrement du test codé de l'interface utilisateur et de toutes ses composantes.Celles-ci incluent les actions et les classes en plus des méthodes et des propriétés de ces classes.Le fichier UIMap.Designer.cs contient le code qui est généré par le Générateur de test codé de l'interface utilisateur pour reproduire la structure du test et fournit la connexion à l'infrastructure de test.

Le fichier UIMap.uitest n'est pas directement modifiable.Toutefois, vous pouvez utiliser le Générateur de test codé de l'interface utilisateur pour modifier le test, ce qui modifie automatiquement le fichier UIMap.uitest et le fichier UIMap.Designer.cs.

Voir aussi

Référence

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

Concepts

Test de l'interface utilisateur avec des tests codés de l'interface utilisateur automatisés

Meilleures pratiques pour les tests codés de l'interface utilisateur

Test d'une grande application avec plusieurs mappages d'IU

Plateformes et configurations prises en charge pour les tests codés de l'interface utilisateur et les enregistrements des actions

Autres ressources

Créer des tests codés de l'interface utilisateur