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 |
UIMap.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.
A 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.
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
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
Mé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.
Propriedades 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.
UIMap.cs
Por padrão, esse arquivo contém uma classe parcial de UIMap que não tem método ou propriedade.
Classe 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.
CodedUITest1.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.
Classe 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.
Propriedades 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
Mé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.
UIMap.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
Microsoft.VisualStudio.TestTools.UITesting.WinControls
Microsoft.VisualStudio.TestTools.UITesting.HtmlControls
Microsoft.VisualStudio.TestTools.UITesting.WpfControls
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