Partilhar via


Anatomia de um teste de IU codificado

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

Requisitos

  • Visual Studio Ultimate, Visual Studio Premium

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

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

Arquivo

Sumário

Editável?

UIMap.Designer.cs

Seção das declarações

Classe de UIMap (parcial, gerado 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 de XML da interface do usuário para o teste.

Não

UIMap.Designer.cs

Esse arquivo contém o código que é criado automaticamente por Construtor de Teste de IU Codificado quando um teste será criado.Esse arquivo é recriado cada vez que um teste alterada, de modo que não é um arquivo no qual você pode adicionar ou modificar o código.

Seção das declarações

Esta seção inclui as seguintes instruções para 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 do Windows (UI).Para uma página da Web interface do usuário, o namespace seria Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; para o Windows Presentation Foundation interface do usuário, o namespace seria Microsoft.VisualStudio.TestTools.UITesting.WpfControls.

Classe 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

O código da classe com GeneratedCodeAttribute que é aplicado à classe, que é declarada como uma classe parcial.Você observará que o atributo é aplicado a cada classe também no arquivo.O outro arquivo que pode conter mais código dessa classe é UIMap.cs, que é discutido posteriormente.

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

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

Métodos de UIMap

Cada método tem uma estrutura semelhante ao método de AddItems() .Isso é explicado com mais detalhes no código, que é apresentado junto com as quebras de linha para adicionar 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 resumido para cada definição do método informa que a classe usar para valores de parâmetro do 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 usadas pelo método.

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

A seguir estão as linhas que envia o texto do teclado para o aplicativo de cálculo usando as propriedades do objeto de AddItemsParams .

O método de VerifyTotal() tem uma estrutura muito semelhante, e inclui o seguinte código da asserçã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 desconhecido porque o desenvolvedor do aplicativo de calculadora do windows não forneceu a publicamente disponível nome do controle.O método de Assert.AreEqual falha quando o valor real não é igual ao valor previsto, que faz com que o teste falhar.Observe também que o valor previsto inclui um ponto decimal que é seguido por um espaço.Se você nunca precisa alterar a funcionalidade deste teste específico, você deve permitir esse ponto decimal e o espaço.

Propriedades de UIMap

O código de cada propriedade também é muito padrão ao longo da 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 uma variável local particular que foi nomeada mAddItemsParams para conter o valor antes que o retorna.O nome da propriedade e o nome da classe do objeto que retorna é o mesmo.A classe é definida posteriormente no arquivo de UIMap.cs .

Cada classe que é retornada por uma propriedade são estruturadas de forma semelhante.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 do arquivo de UIMap.cs , o inicia dessa classe com GeneratedCodeAttribute.Nessa classe pequena for uma região de Fields que define as cadeias de caracteres para usar como parâmetros do método do Keyboard.SendKeys usado no método de UIMap.AddItems() que foi anteriormente descrito.Você pode escrever o código para substituir os valores nesses campos de cadeia de caracteres antes do método no qual esses parâmetros são usados são chamados.

UIMap.cs

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

Classe de UIMap

É aí que você pode criar código personalizado para estender a funcionalidade da classe de UIMap .O código que você cria nesse arquivo não será gerado por Construtor de Teste de IU Codificado todas as vezes que um teste é alterado.

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

CodedUITest1.cs

Esse arquivo é gerado por Construtor de Teste de IU Codificado, mas não recriado cada vez que o teste for alterado, de modo que você possa alterar o código nesse arquivo.O nome do arquivo é gerado do nome especificado para o teste quando você criou o.

Classe CodedUITest1

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

[CodedUITest]
public class CodedUITest1

O T: Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute é aplicado automaticamente à classe, que permite que a estrutura de testes a reconhecerão como uma extensão de teste.Também observe que esta não é uma classe parcial.Qualquer código de classe é contido nesse arquivo.

Propriedades CodedUITest1

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

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

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

public void CodedUITestMethod1()

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

Uma região que é denominada Additional test attributes, se uncommented, 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 ela, com a estrutura de teste para chamar esse método antes de todos os outros métodos de teste.Da mesma forma, o método de MyTestCleanup() tem TestCleanupAttribute aplicado a ela, com a estrutura de teste para chamar este método outros métodos de teste depois que foram chamados.O uso desses métodos é opcional.Para esse 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.

UIMap.uitest

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

O arquivo de UIMap.uitest não pode ser editada diretamente.Porém, você pode usar o construtor codificado de interface do usuário para modificar o teste, o 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 código pela Automação da Interface do Usuário

Práticas recomendadas para testes de IU codificados

Testando um aplicativo grande com vários mapas de interface do usuário

Configurações e plataformas compatíveis para testes de IU codificados e gravações de ações

Outros recursos

Criando teste codificados da interface do usuário