Compartir a través de


Anatomía de una prueba de IU codificada

Al crear una prueba de IU codificada en un proyecto de prueba, se agregan varios archivos a su solución. En este tema, usaremos una prueba de IU codificada de ejemplo para explorar estos archivos.

Contenido de una prueba de IU codificada

Al crear una prueba de IU codificada, el Generador de pruebas de IU codificadas crea una asignación de la interfaz de usuario en pruebas y también los métodos de prueba, los parámetros y las aserciones para todas las pruebas. También crea un archivo de clase para cada prueba.

Archivo

Contenido

¿Editable?

UIMap.Designer.cs

Sección Declaraciones

Clase UIMap (parcial, generada automáticamente)

Métodos

Propiedades

No

UIMap.cs

Clase UIMap (parcial)

CodedUITest1.cs

Clase CodedUITest1

Métodos

Propiedades

UIMap.uitest

Asignación XML de la interfaz de usuario para la prueba.

No

UIMap.Designer.cs

Este archivo contiene código creado automáticamente por el Generador de pruebas de IU codificadas cuando se crea una prueba. Este archivo se vuelve a crear cada vez que cambia una prueba, por lo que no puede agregar ni modificar código en él.

Sección Declaraciones

En esta sección se incluyen las siguientes declaraciones para una interfaz de usuario de 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;

El espacio de nombres Microsoft.VisualStudio.TestTools.UITesting.WinControls está incluido para una interfaz de usuario (IU) de Windows. Para una interfaz de usuario de página web, el espacio de nombres sería Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; para una interfaz de usuario de Windows Presentation Foundation, el espacio de nombres sería Microsoft.VisualStudio.TestTools.UITesting.WpfControls.

Clase UIMap

La siguiente sección del archivo es la clase UIMap.

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

El código de clase empieza con un GeneratedCodeAttribute que se aplica a la clase, que se declara como una clase parcial. Observará que el atributo también se aplica a todas las clases de este archivo. El otro archivo que puede contener más código para esta clase es UIMap.cs, que se describe más adelante.

La clase UIMap generada incluye código para cada método que se especificó cuando se grabó la prueba.

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

Esta parte de la clase UIMap también incluye el código generado para cada propiedad que los métodos necesitan.

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étodos de UIMap

Cada método tiene una estructura similar al método AddItems(). Esto se explica con más detalle en el código, que se presenta junto con saltos de línea para mayor claridad.

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

El comentario resumen para cada definición de método indica qué clase se va a usar para los valores de parámetro de ese método. En este caso, es la clase AddItemsParams, que se define más adelante en el archivo UIMap.cs, y que también es el tipo de valor devuelto por la propiedad AddItemsParams.

En la parte superior del código del método hay una región Variable Declarations que define variables locales para los objetos de la IU que usará el método.

En este método, tanto UIItemWindow como UIItemEdit son propiedades a las que se tiene acceso mediante la clase UICalculatorWindow, que se define más adelante en el archivo UIMap.cs.

Después hay líneas que envían texto del teclado a la aplicación Calculadora usando propiedades del objeto AddItemsParams.

El método VerifyTotal() tiene una estructura muy similar e incluye el código de aserción siguiente.

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

El nombre del cuadro de texto se muestra como desconocido porque el desarrollador de la aplicación Calculadora de Windows no proporcionó un nombre disponible públicamente para el control. El método Assert.AreEqual produce un error cuando el valor real no es igual al valor esperado, lo que haría que la prueba no se superara. Observe también que el valor esperado incluye un separador decimal seguido de un espacio en espacio. Si alguna vez tiene que modificar la funcionalidad de esta prueba concreta, debe tener en cuenta ese separador decimal y el espacio en blanco.

Propiedades de UIMap

El código de cada propiedad es también muy estándar en toda la clase. El siguiente código para la propiedad AddItemsParams se usa en el método AddItems().

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

Observe que la propiedad emplea una variable local privada denominada mAddItemsParams para almacenar el valor antes de devolverlo. El nombre de propiedad y el nombre de clase para el objeto que devuelve son el mismo. La clase se define más adelante en el archivo UIMap.cs.

Cada clase devuelta por una propiedad tiene una estructura similar. A continuación está la clase 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
}

Como ocurre con todas las clases del archivo UIMap.cs, esta clase empieza con GeneratedCodeAttribute. En esta clase pequeña hay una región Fields que define las cadenas que se van a usar como parámetros para el método Keyboard.SendKeys empleado en el método UIMap.AddItems() que se describió anteriormente. Puede escribir código para reemplazar los valores de estos campos de cadena antes de que se llame al método en el que se usan estos parámetros.

UIMap.cs

De forma predeterminada, este archivo contiene una clase UIMap parcial que no tiene ningún método o propiedad.

Clase UIMap

Aquí es donde puede crear código personalizado para extender la funcionalidad de la clase UIMap. El Generador de pruebas de IU codificadas no volverá a generar el código que cree en este archivo cada vez que se modifique una prueba.

Todas las partes de UIMap pueden usar los métodos y las propiedades de cualquier otra parte de la clase UIMap.

CodedUITest1.cs

El Generador de pruebas de IU codificadas genera este archivo, pero no vuelve a crearlo cada vez que se modifica la prueba, por lo que puede modificar el código de este archivo. El nombre del archivo se genera a partir del nombre que especificó para la prueba cuando la creó.

Clase CodedUITest1

De forma predeterminada, este archivo contiene la definición de solo una clase.

[CodedUITest]
public class CodedUITest1

T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute se aplica automáticamente a la clase, lo que permite al marco de prueba reconocerla como una extensión de prueba. Observe también que no se trata de una clase parcial. Todo el código de clase está contenido en este archivo.

Propiedades de CodedUITest1

La clase contiene dos propiedades predeterminadas que se encuentran en la parte inferior del archivo. No se deben modificar.

/// <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étodos de CodedUITest1

De forma predeterminada, la clase solo contiene un método.

public void CodedUITestMethod1()

Este método llama a cada método UIMap que especificó cuando grabó la prueba, que se describe en la sección sobre la Clase UIMap.

Si se quitan las marcas de comentarios de una región titulada Additional test attributes, dicha región contiene dos métodos opcionales.

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

El método MyTestInitialize() tiene aplicado el TestInitializeAttribute, lo que indica al marco de prueba que debe llamar a este método antes que a cualquier otro método de prueba. Del mismo modo, el método MyTestCleanup() tiene aplicado el TestCleanupAttribute, lo que indica al marco de prueba que debe llamar a este método después de haber llamado a todos los demás métodos de prueba. El uso de estos métodos es opcional. Para esta prueba, se podría llamar al método UIMap.LaunchCalculator() desde MyTestInitialize() y se podría llamar al método UIMap.CloseCalculator() desde MyTestCleanup() en lugar de llamarlo desde CodedUITest1Method1().

Si agrega más métodos a esta clase mediante CodedUITestAttribute, el marco de prueba llamará a cada método como parte de la prueba.

UIMap.uitest

Este es un archivo XML que representa la estructura de la grabación de prueba de IU codificada y todas sus partes. Esto incluye las acciones y las clases, además de los métodos y las propiedades de esas clases. El archivo UIMap.Designer.cs contiene el código generado por el Generador de pruebas de IU codificadas para reproducir la estructura de la prueba y proporciona la conexión al marco de prueba.

El archivo UIMap.uitest no es editable directamente. Sin embargo, puede usar el Generador de pruebas de IU codificadas para modificar la prueba, lo que modifica automáticamente los archivos UIMap.uitest y UIMap.Designer.cs.

Vea también

Tareas

Cómo: Crear una prueba de IU codificada

Cómo: Agregar controles de IU y código de validación mediante el generador de pruebas de IU codificadas

Referencia

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

Conceptos

Procedimientos recomendados para las pruebas de IU codificadas

Configuraciones y plataformas compatibles con las pruebas de IU codificadas y las grabaciones de acciones

Otros recursos

Probar una aplicación grande con varios mapas de IU