Composizione di un test codificato dell'interfaccia utente
Quando si crea un test codificato dell'interfaccia utente, vengono aggiunti diversi file alla soluzione.In questo argomento verrà utilizzato un esempio test codificato dell'interfaccia utente per esplorare questi file.
Requisiti
- Visual Studio Ultimate, Visual Studio Premium
Contenuto di un test codificato dell'interfaccia utente
Quando si crea un test codificato dell'interfaccia utente, il Generatore di test codificati dell'interfaccia utente crea una mappa dell'interfaccia utente sottoposta a test nonché i metodi, i parametri e le asserzioni di test per tutti i test.Crea inoltre un file di classe per ciascun test.
File |
Contenuto |
Modificabile |
---|---|---|
UIMap.Designer.cs |
Sezione Dichiarazioni Classe UIMap (parziale, generata automaticamente) Metodi Proprietà |
No |
UIMap.cs |
Classe UIMap (parziale) |
Sì |
CodedUITest1.cs |
Classe CodedUITest1 Metodi Proprietà |
Sì |
UIMap.uitest |
Mappa XML dell'interfaccia utente per il test. |
No |
UIMap.Designer.cs
Questo file contiene codice creato automaticamente dal Generatore di test codificati dell'interfaccia utente quando si crea un test.Il file viene ricreato ogni volta che un test cambia ed è pertanto un file in cui non è possibile aggiungere o modificare codice.
Sezione Dichiarazioni
In questa sezione vengono incluse le dichiarazioni seguenti per un'interfaccia utente 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;
Lo spazio dei nomi Microsoft.VisualStudio.TestTools.UITesting.WinControls è incluso per un'interfaccia utente Windows.Per l'interfaccia utente di una pagina Web, lo spazio dei nomi sarebbe Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; per un'interfaccia utente di Windows Presentation Foundation, lo spazio dei nomi sarebbe Microsoft.VisualStudio.TestTools.UITesting.WpfControls.
Classe UIMap
La sezione seguente del file è la classe UIMap.
[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]
public partial class UIMap
Il codice della classe inizia con un attributo GeneratedCodeAttribute che viene applicato alla classe, dichiarata come classe parziale.Si noterà che l'attributo viene applicato anche a ogni altra classe in questo file.L'altro file che può contenere altro codice per questa classe è UIMap.cs, illustrato più avanti.
La classe UIMap generata include codice per ogni metodo specificato quando è stato registrato il test.
public void LaunchCalculator()
public void AddItems()
public void VerifyTotal()
public void CleanUp()
Questa parte della classe UIMap include anche il codice generato per ogni proprietà richiesta dai metodi.
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
Metodi UIMap
Ciascun metodo dispone di una struttura simile al metodo AddItems().Ciò viene illustrato in maggiore dettaglio sotto al codice, che viene presentato con interruzioni di riga per migliorarne la leggibilità.
/// <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);
}
Il commento riepilogativo per ogni definizione del metodo indica quale classe utilizzare per i valori di parametro per quel metodo.In questo caso, la classe è AddItemsParams, definita in un secondo momento nel file UIMap.cs e che è anche il tipo di valore restituito dalla proprietà AddItemsParams.
All'inizio del codice del metodo è presente un'area Variable Declarations che definisce variabili locali per gli oggetti dell'interfaccia utente che verranno utilizzati dal metodo.
In questo metodo, sia UIItemWindow sia UIItemEdit sono proprietà cui si accede tramite la classe UICalculatorWindow, definita più avanti nel file UIMap.cs.
Vi sono quindi righe che inviano il testo dalla tastiera all'applicazione Calcolatrice tramite le proprietà dell'oggetto AddItemsParams.
Il metodo VerifyTotal() dispone di una struttura molto simile e include il codice di asserzione seguente.
// Verify that 'Unknown Name' text box's property 'Text' equals '9. '
Assert.AreEqual(
this.VerifyTotalExpectedValues.UIItemEditText,
uIItemEdit.Text);
Il nome della casella di testo è elencato come sconosciuto poiché lo sviluppatore dell'applicazione Calcolatrice di Windows non ha fornito un nome pubblicamente disponibile per il controllo.Il metodo Assert.AreEqual non riesce quando il valore effettivo non è uguale al valore previsto, situazione che causerebbe l'esito negativo del test.Si noti inoltre che il valore previsto include un separatore decimale seguito da uno spazio.Se risultasse necessario modificare la funzionalità di questo test specifico, sarà necessario riservare lo spazio per quel separatore decimale e il relativo spazio.
Proprietà UIMap
Il codice per ciascuna proprietà è di tipo molto standard in tutta la classe.Il codice seguente per la proprietà AddItemsParams viene utilizzato nel metodo AddItems().
public virtual AddItemsParams AddItemsParams
{
get
{
if ((this.mAddItemsParams == null))
{
this.mAddItemsParams = new AddItemsParams();
}
return this.mAddItemsParams;
}
}
Si noti che la proprietà utilizza una variabile locale privata denominata mAddItemsParams per contenere il valore prima di restituirlo.Il nome della proprietà e il nome della classe per l'oggetto che restituisce sono uguali.La classe viene definita più avanti nel file UIMap.cs.
Ogni classe restituita da una proprietà è strutturata in modo simile.Quella che segue è la classe 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
}
Così come avviene per tutte le classi nel file UIMap.cs, questa classe inizia con l'attributo GeneratedCodeAttribute.In questa piccola classe è presente un'area Fields che definisce le stringhe da utilizzare come parametri per il metodo Keyboard.SendKeys utilizzato nel metodo UIMap.AddItems() illustrato in precedenza.È possibile scrivere codice per sostituire i valori in questi campi stringa prima che venga chiamato il metodo in cui vengono utilizzati tali parametri.
UIMap.cs
Per impostazione predefinita, questo file contiene una classe UIMap parziale che non dispone di metodi o proprietà.
Classe UIMap
Qui è possibile creare codice personalizzato per estendere la funzionalità della classe UIMap.Il codice che si crea in questo file non verrà rigenerato dal Generatore di test codificati dell'interfaccia utente ogni volta che viene modificato un test.
Tutte le parti dell'oggetto UIMap possono utilizzare metodi e proprietà presenti in qualsiasi altra parte della classe UIMap.
CodedUITest1.cs
Questo file è generato dal Generatore di test codificati dell'interfaccia utente, ma non viene ricreato ogni volta che si modifica il test ed è pertanto possibile modificare il codice del file.Il nome del file viene generato dal nome specificato per il test quando questo è stato creato.
Classe CodedUITest1
Per impostazione predefinita, questo file contiene la definizione per una sola classe.
[CodedUITest]
public class CodedUITest1
L'attributo T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute viene applicato automaticamente alla classe che consente al framework di test di riconoscerlo come estensione del test.Si noti inoltre che questa non è una classe parziale.Il codice della classe è contenuto interamente in questo file.
Proprietà CodedUITest1
La classe contiene due proprietà predefinite posizionate in fondo al file.Tali funzioni non devono essere modificate.
/// <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
Metodi CodedUITest1
Per impostazione predefinita, la classe contiene solo un metodo.
public void CodedUITestMethod1()
Questo metodo chiama ciascun metodo UIMap specificato quando è stato registrato il test, come descritto nella sezione relativa alla Classe UIMap.
Un'area denominata Additional test attributes, se vengono rimossi i commenti, contiene due metodi facoltativi.
// 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();
}
Il metodo MyTestInitialize() presenta l'attributo TestInitializeAttribute applicato, il che indica al framework di test di chiamare questo metodo prima di qualsiasi altro metodo di test.Analogamente, il metodo MyTestCleanup() presenta l'attributo TestCleanupAttribute applicato, il che indica al framework di test di chiamare questo metodo dopo che sono stati chiamati tutti gli altri metodi di test.L'utilizzo di questi metodi è facoltativo.Per questo test, il metodo UIMap.LaunchCalculator() può essere chiamato da MyTestInitialize() e il metodo UIMap.CloseCalculator() da MyTestCleanup() anziché da CodedUITest1Method1().
Se si aggiungono più metodi a questa classe tramite l'attributo CodedUITestAttribute, il framework di test chiamerà ogni metodo come parte del test.
UIMap.uitest
Si tratta di un file XML che rappresenta la struttura della registrazione del test codificato dell'interfaccia utente e tutte le sue parti.Queste includono le azioni e le classi oltre ai metodi e le proprietà di tali classi.Il file UIMap.Designer.cs contiene il codice generato dal Generatore di test codificati dell'interfaccia utente per riprodurre la struttura del test e fornisce la connessione al framework di test.
Il file UIMap.uitest non è direttamente modificabile.Tuttavia, è possibile utilizzare il Generatore di test codificati dell'interfaccia utente che modifica automaticamente i file UIMap.uitest e UIMap.Designer.cs.
Vedere anche
Riferimenti
Microsoft.VisualStudio.TestTools.UITesting.WinControls
Microsoft.VisualStudio.TestTools.UITesting.HtmlControls
Microsoft.VisualStudio.TestTools.UITesting.WpfControls
Concetti
Verifica del codice mediante test codificati dell'interfaccia utente
Procedure consigliate per i test codificati dell'interfaccia utente
Test di un'applicazione di grandi dimensioni con più mappe dell'interfaccia utente