Compartilhar via


Anatomy of a Coded UI Test

Quando você cria um teste codificado de interface do usuário em um projeto codificado de teste de interface do usuário, vários arquivos são adicionados à solução.Neste tópico, usaremos um exemplo codificado teste de interface de usuário para explorar esses arquivos.

Requisitos

  • Visual Studio Ultimate, Visual Studio Premium

Conteúdo de um teste codificado de interface de usuário

Quando você cria um teste codificado de interface do usuário, Construtor codificado de teste de interface de usuário cria um mapa de interface do usuário no teste, e também os métodos de teste, os parâmetros, e as declarações para todos os testes.Também cria um arquivo de classe para cada teste.

Arquivo

Sumário

Editável?

UIMap.Designer.cs

A seção de declarações

Classe de UIMap (parcial, gerada automaticamente)

Métodos

Propriedades

Não

UIMap.cs

Classe de UIMap (parcial)

Sim

CodedUITest1.cs

Classe CodedUITest1

Métodos

Propriedades

Sim

UIMap.uitest

O mapa XML de interface de usuário para teste.

Não

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

Este arquivo contém o código que é criada automaticamente por Construtor codificado de teste de interface de usuário quando um teste é criado.Este arquivo é re-criada sempre que um teste alterado, de modo que não é um arquivo em que você pode adicionar ou alterar o código.

Ff398062.collapse_all(pt-br,VS.110).gifA seção de declarações

Esta seção inclui as seguintes declarações para o Windows interface do usuário.

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;

O namespace de Microsoft.VisualStudio.TestTools.UITesting.WinControls é incluída para uma interface de usuário (UI) do Windows.Para uma página da Web interface do usuário, o namespace seria Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; para Windows Presentation Foundation interface do usuário, o namespace seria Microsoft.VisualStudio.TestTools.UITesting.WpfControls.

Ff398062.collapse_all(pt-br,VS.110).gifClasse de UIMap

A próxima seção do arquivo é a classe de UIMap .

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

Inicia o código de classe com GeneratedCodeAttribute que é aplicado à classe, que é declarada como uma classe parcial.Você observará que o atributo é aplicado também a cada classe no arquivo.Outro arquivo que pode conter mais código para essa classe é UIMap.cs, que é abordado posteriormente.

A classe gerada de UIMap inclui o código para cada método que foi especificado quando o teste foi gravado.

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

Esta parte da classe de UIMap também inclui o código gerado para cada propriedade que é necessária por métodos.

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(pt-br,VS.110).gifMétodos de UIMap

Cada método tem uma estrutura que se assemelha ao método de AddItems() .Isso é explicado em mais detalhes no código, que é apresentado junto com quebras de linha para adicionar a clareza.

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

O comentário de resumo para cada definição do método com que a classe usar para valores de parâmetro para o método.Nesse caso, é a classe de AddItemsParams , que são definidas posteriormente no arquivo de UIMap.cs , e que também é o tipo de valor retornado pela propriedade de AddItemsParams .

Na parte superior do código do método é uma região de Variable Declarations que define variáveis locais para os objetos de interface do usuário que serão usados pelo método.

Nesse método, UIItemWindow e UIItemEdit são as propriedades que são acessados usando a classe de UICalculatorWindow , que é definido posteriormente no arquivo de UIMap.cs .

Em seguida é linhas que envia o texto do teclado ao aplicativo calculadora usando as propriedades do objeto de AddItemsParams .

O método de VerifyTotal() tem uma estrutura muito semelhante, e inclui o seguinte código de declaração.

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

O nome da caixa de texto é listado como o conhecido como o desenvolvedor do aplicativo calculadora do Windows não forneceu a publicamente nome disponível para o controle.O método de Assert.AreEqual falha quando o valor real não é igual ao valor esperado, que poderiam causar o teste falhar.Também observe que o valor esperado inclui um ponto decimal que é seguido por um espaço.Se você nunca precisa alterar a funcionalidade desse teste específico, você deve permitir esse ponto decimal e o espaço.

Ff398062.collapse_all(pt-br,VS.110).gifPropriedades de UIMap

O código para cada propriedade também é muito padrão durante a classe.O código a seguir para a propriedade de AddItemsParams é usado no método de AddItems() .

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

Observe que a propriedade usa um variável local particular que é chamado mAddItemsParams para conter o valor antes que o retorna.O nome de propriedade e o nome de classe para o objeto que retorna é o mesmo.A classe é definida mais tarde no arquivo de UIMap.cs .

Cada classe que é retornada por uma propriedade é a mesma forma estruturada.O seguinte é a classe de 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 com todas as classes no arquivo de UIMap.cs , começa dessa classe com GeneratedCodeAttribute.Nessa classe pequena é uma região de Fields que define as cadeias de caracteres para usar como parâmetros para o método de Keyboard.SendKeys que é usado no método de UIMap.AddItems() que foi discutido anteriormente.Você pode escrever código para substituir os valores nesses campos de cadeia de caracteres antes de método em que esses parâmetros são usados são chamados.

Ff398062.collapse_all(pt-br,VS.110).gifUIMap.cs

Por padrão, esse arquivo contém uma classe parcial de UIMap que não tem método ou propriedade.

Ff398062.collapse_all(pt-br,VS.110).gifClasse de UIMap

Isso é onde você pode criar o código personalizado para estender a funcionalidade da classe de UIMap .O código que você cria neste arquivo não será regenerado por Construtor codificado de teste de interface de usuário sempre que um teste é modificado.

Todas as partes de UIMap podem usar os métodos e propriedades de qualquer outra parte de UIMap classe.

Ff398062.collapse_all(pt-br,VS.110).gifCodedUITest1.cs

Este arquivo é gerado por Construtor codificado de teste de interface de usuário, mas não re-criada sempre que o teste é modificado, para que você possa alterar o código no arquivo.O nome do arquivo é gerado de nome que você especificou para teste ao criá-la.

Ff398062.collapse_all(pt-br,VS.110).gifClasse CodedUITest1

Por padrão, esse arquivo contém a definição apenas para uma classe.

[CodedUITest]
public class CodedUITest1

O T: Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute é aplicado automaticamente à classe, que permite que a estrutura testando a reconhece como uma extensão de teste.Também observe que isso é não uma classe parcial.Todo o código de classe é contido neste arquivo.

Ff398062.collapse_all(pt-br,VS.110).gifPropriedades CodedUITest1

A classe contém duas propriedades padrão localizadas na parte inferior do arquivo.Não devem ser alterados.

/// <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(pt-br,VS.110).gifMétodos CodedUITest1

Por padrão, a classe contém apenas um método.

public void CodedUITestMethod1()

Este método chama cada método de UIMap que você especificou quando você gravou o seu teste, que é descrito na seção em Classe de UIMap.

Uma região que é denominada Additional test attributes, se o descomentássemos, contém dois métodos opcionais.

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

O método de MyTestInitialize() tem TestInitializeAttribute aplicado a ele, que informa a estrutura de teste para chamar esse método antes de quaisquer outros métodos de teste.Da mesma forma, o método de MyTestCleanup() tem TestCleanupAttribute aplicado a ele, que informa a estrutura de teste para chamar esse método outros métodos de testes completos que foram chamados.O uso desses métodos é opcional.Para este teste, o método de UIMap.LaunchCalculator() pode ser chamado de MyTestInitialize() e o método de UIMap.CloseCalculator() pode ser chamado de MyTestCleanup() em vez de CodedUITest1Method1().

Se você adicionar mais métodos para essa classe usando CodedUITestAttribute, a estrutura de teste chamará cada método como parte de teste.

Ff398062.collapse_all(pt-br,VS.110).gifUIMap.uitest

Este é um arquivo XML que representa a estrutura de gravação codificado de teste de interface do usuário e todas as partes.Esses incluem as ações e as classes além dos métodos e propriedades dessas classes.O arquivo de UIMap.Designer.cs contém o código que é gerado pelo construtor codificado de interface de usuário para reproduzir a estrutura de teste e fornece a conexão para a estrutura de teste.

O arquivo de UIMap.uitest não diretamente for editável.No entanto, você pode usar o construtor codificado de interface de usuário para alterar o teste, que altera automaticamente o arquivo de UIMap.uitest e o arquivo de UIMap.Designer.cs .

Consulte também

Referência

UIMap

Microsoft.VisualStudio.TestTools.UITesting.WinControls

Microsoft.VisualStudio.TestTools.UITesting.HtmlControls

Microsoft.VisualStudio.TestTools.UITesting.WpfControls

GeneratedCodeAttribute

Assert.AreEqual

Keyboard.SendKeys

CodedUITestAttribute

TestInitializeAttribute

TestCleanupAttribute

Conceitos

Verificando o código usando testes de interface do usuário codificada

Best Practices for Coded UI Tests

Testing a Large Application with Multiple UI Maps

Supported Configurations and Platforms for Coded UI Tests and Action Recordings

Outros recursos

Criando teste codificados de interface de usuário