Anatomia de um teste codificado de UI
Quando você cria um teste de interface do usuário codificado em um projeto de teste, vários arquivos são adicionados à sua solução. Neste tópico, usaremos um exemplo de teste de interface do usuário do Coded para explorar esses arquivos.
Conteúdo de um teste codificado de UI
Quando você cria um Coded UI Test, o Construtor de teste de interface do usuário codificado cria um mapa da interface do usuário em teste e também os métodos de teste, parâmetros e declarações de todos os testes. Ele também cria um arquivo de classe para cada teste.
File |
Contents |
Editável? |
---|---|---|
UIMap.Designer.cs |
Seção de declarações Classe de UIMap (parcial, gerado automaticamente) Métodos Propriedades |
Não |
UIMap.cs |
Classe de UIMap (parcial) |
Sim |
CodedUITest1.cs |
Classe de CodedUITest1 Métodos Propriedades |
Sim |
UIMap.uitest |
O mapa XML da interface do usuário para o teste. |
Não |
UIMap.Designer.cs
Este arquivo contém código que é criado automaticamente pelo Construtor de teste de interface do usuário codificado quando um teste é criado. Este arquivo é recriado toda vez que um teste é alterado, para que não seja um arquivo no qual você pode adicionar ou modificar o código.
Seção de declarações
Esta seção inclui as seguintes declarações de uma interface de usuário do 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;
O Microsoft.VisualStudio.TestTools.UITesting.WinControls espaço para nome é incluído para uma interface de usuário (UI) do Windows. Para uma página da Web da interface do usuário, o namespace seria Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; para uma interface de Windows Presentation Foundation, seria o namespace Microsoft.VisualStudio.TestTools.UITesting.WpfControls.
Classe de UIMap
A próxima seção do arquivo é o UIMap classe.
[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]
public partial class UIMap
O código da classe começa com um GeneratedCodeAttribute que é aplicado à classe, que é declarada como uma classe de parcial. Você irá notar que o atributo também é aplicado a cada classe neste arquivo. O arquivo pode conter mais de código para esta classe é UIMap.cs, que será discutido posteriormente.
Gerado UIMap classe inclui 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 do UIMap classe 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 semelhante a AddItems() método. Isso é explicado mais detalhadamente em código, o 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 de método informa qual classe a ser usado para valores de parâmetro para o método. Nesse caso, é o AddItemsParams classe, que é definido posteriormente na UIMap.cs arquivo e que também é o tipo do valor retornado pelo AddItemsParams propriedade.
Na parte superior do método o código é um Variable Declarations objetos de região, que define as variáveis locais para a interface do usuário que será usado pelo método.
Nesse método, ambos UIItemWindow e UIItemEdit são propriedades que são acessadas usando o UICalculatorWindow classe, que é definido posteriormente na UIMap.cs arquivo.
Em seguida, são linhas enviar texto do teclado para o aplicativo Calculadora usando propriedades da AddItemsParams objeto.
O VerifyTotal() método possui 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 está listado como desconhecido, porque o desenvolvedor do aplicativo Calculadora do Windows não forneceu um nome publicamente disponível para o controle. O Assert.AreEqual método falha quando o valor real não é igual ao valor esperado, o que faria com que o teste falhar. Observe também que o valor esperado inclui um ponto decimal que é seguido por um espaço. Se for necessário modificar a funcionalidade desse teste específico, você deve permitir que ponto decimal e o espaço.
Propriedades de UIMap
O código para cada propriedade também é muito padrão por meio da classe. O seguinte código para o AddItemsParams propriedade é usada a AddItems() método.
public virtual AddItemsParams AddItemsParams
{
get
{
if ((this.mAddItemsParams == null))
{
this.mAddItemsParams = new AddItemsParams();
}
return this.mAddItemsParams;
}
}
Observe que a propriedade utiliza uma variável local particular chamado mAddItemsParams para conter o valor antes de retornar o proprietário. O nome da propriedade e o nome da classe do objeto, que ela retorna são os mesmos. A classe é definida posterior a UIMap.cs arquivo.
Cada classe que é retornado por uma propriedade é estruturada de forma semelhante. A seguir está o AddItemsParams classe.
/// <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 ocorre com todas as classes na UIMap.cs arquivo, essa classe é iniciado com o GeneratedCodeAttribute. Nesta pequena classe é um Fields região que define as seqüências de caracteres para usar como parâmetros para o Keyboard.SendKeys método é usado na UIMap.AddItems() método que foi discutido anteriormente. Você pode escrever código para substituir os valores nesses campos de seqüência antes do método no qual esses parâmetros são usados é chamado.
UIMap.cs
Por padrão, esse arquivo contém um parcial UIMap classe que não possui métodos ou propriedades.
Classe de UIMap
Isso é onde você pode criar código personalizado para estender a funcionalidade da UIMap classe. O código que você criar neste arquivo não será regenerado pela Construtor de teste de interface do usuário codificado toda vez que um teste é modificado.
Todas as partes a UIMap pode usar os métodos e propriedades de qualquer outra parte do UIMap classe.
CodedUITest1.cs
Este arquivo é gerado pelo Construtor de teste de interface do usuário codificado, mas não é recriada toda vez que o teste é modificado, para que você possa modificar o código neste arquivo. O nome do arquivo é gerado do nome que você especificou para o teste quando você o criou.
Classe de CodedUITest1
Por padrão, esse arquivo contém a definição de apenas uma classe.
[CodedUITest]
public class CodedUITest1
O T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute é aplicada automaticamente à classe, que permite que a estrutura de testes para reconhecê-lo como uma extensão de teste. Observe também que não é uma classe parcial. Todo código de classe está contido nesse arquivo.
Propriedades de CodedUITest1
A classe contém duas propriedades padrão que estão localizadas na parte inferior do arquivo. Eles 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 de CodedUITest1
Por padrão, a classe contém somente um método.
public void CodedUITestMethod1()
Este método chama cada UIMap o método que você especificou quando você registrou o seu teste, que é descrito na seção sobre o UIMap classe.
Uma região que é intitulada Additional test attributes, se removidos, contém dois métodos opcional.
// 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 MyTestInitialize() método tem o TestInitializeAttribute aplicado a ele, que informa que a estrutura de testes para chamar esse método antes de qualquer outro teste métodos. Da mesma forma, o MyTestCleanup() método tem o TestCleanupAttribute aplicado a ele, que informa que a estrutura de testes para chamar esse método de após todos os outros métodos de teste foram chamadas. O uso desses métodos é opcional. Para este teste, o UIMap.LaunchCalculator() método poderia ser chamado de MyTestInitialize() e o UIMap.CloseCalculator() método poderia ser chamado a partir MyTestCleanup() em vez de CodedUITest1Method1().
Se você adicionar mais métodos para essa classe usando o CodedUITestAttribute, a estrutura de testes irá chamar cada método como parte do Test.
UIMap.uitest
Este é um arquivo XML que representa a estrutura da interface do usuário codificado teste de gravação e todas as suas partes. Elas incluem as ações e as classes e os métodos e propriedades dessas classes. O UIMap.Designer.cs arquivo contém o código que é gerado pelo construtor de interface do usuário codificados para reproduzir a estrutura do teste e fornece a conexão com a estrutura de testes.
O UIMap.uitest arquivo não é editável diretamente. No entanto, você pode usar o construtor de interface do usuário codificados para modificar o teste, que modifica automaticamente o UIMap.uitest arquivo e o UIMap.Designer.cs arquivo.
Consulte também
Tarefas
Como: Criar um teste codificado de UI
Referência
Microsoft.VisualStudio.TestTools.UITesting.WinControls
Microsoft.VisualStudio.TestTools.UITesting.HtmlControls
Microsoft.VisualStudio.TestTools.UITesting.WpfControls
Conceitos
Práticas recomendadas para testes codificados da interface do usuário