Kodlanmış UI testinin anatomisi
Bir test projesinde Kodlanmış bir UI Testi oluşturduğunuzda çözümünüze birkaç dosya eklenir. Bu konuda bu dosyaları keşfetmek için örnek Kodlanmış UI Testi kullanacağız.
Kodlanmış Kullanıcı Arabirimi Testinin İçerikleri
Kodlanmış bir UI Testi oluşturduğunuzda Kodlanmış UI Test Oluşturucusu test edilen kullanıcı arabiriminin ve ayrıca da test yöntemlerinin, parametrelerin ve tüm testler için onayların bir eşlemesini oluşturur. Her test için bir sınıf dosyası oluşturur.
Dosya |
İçindekiler |
Düzenlenebilir mi? |
---|---|---|
UIMap.Designer.cs |
Bildirimler bölümü UIMap sınıfı (kısmi, otomatik oluşturulmuş) Yöntemler Özellikler'i tıklatın |
Hayır |
UIMap.cs |
UIMap sınıfı (kısmi) |
Evet |
CodedUITest1 cs |
CodedUITest1 sınıfı Yöntemler Özellikler'i tıklatın |
Evet |
UIMap.uitest |
Test için UI öğesine ilişkin XML eşlemesi. |
Hayır |
UIMap.Designer.cs
Bu dosya, Kodlanmış Arayüz Testi Oluşturucu tarafından otomatik olarak oluşturulan kodu içerir. Bu dosya, bir testin değiştirildiği her sefer yeniden oluşturulur, dolayısıyla bu içine kod ekleyebileceğiniz veya içindeki kodu değiştirebileceğiniz bir dosya değildir.
Bildirimler bölümü
Bu bölüm, bir Windows UI için aşağıdaki bildirimleri içermektedir.
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;
Microsoft.VisualStudio.TestTools.UITesting.WinControls ad alanı bir Windows kullanıcı arabirimi (UI) için dahil edilir. Web sayfası Kullanıcı Arabirimi, için ad alanı Microsoft.VisualStudio.TestTools.UITesting.HtmlControlsolmalıdır; Windows Presentation Foundation Arabirimi için ad alanıMicrosoft.VisualStudio.TestTools.UITesting.WpfControls olmalıdır.
UIMap sınıfı
Dosyanın sonraki bölümü UIMap sınıfıdır.
[GeneratedCode("Coded UITest Builder", "10.0.21221.0")]
public partial class UIMap
Sınıf kodu, kısmi sınıf olarak bildirilmiş sınıfa uygulanan bir GeneratedCodeAttribute ile başlar. Özniteliğin bu dosyadaki her sınıfa da uygulandığını fark edeceksiniz. Bu sınıf için daha fazla kod içerebilecek olan diğer dosya daha sonra tartışılan UIMap.cs öğesidir.
Oluşturulan UIMap sınıfı test kaydedilirken belirtilen her yöntem için kod içerir.
public void LaunchCalculator()
public void AddItems()
public void VerifyTotal()
public void CleanUp()
UIMap sınıfının bu kısmı, aynı zamanda yöntemler tarafından gereksinilen her bir özellik için yaratılmış kodu içerir.
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
UIMap yöntemleri
Her yöntem AddItems() yöntemine benzer bir yapıya sahiptir. Bu, daha anlaşılır hale getirmek için satır sonlarıyla sunulan kodun altında daha ayrıntılı olarak açıklanmaktadır.
/// <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);
}
Her yöntem tanımına ilişkin özet yorumu, bu yöntem için parametre değerlerine özgü hangi sınıfın kullanılacağını söyler. Bu durumda, daha sonra UIMap.cs dosyasında tanımlanan ve AddItemsParams özelliği tarafından döndürülen bir değer türü olan AddItemsParams sınıfıdır.
Yöntem kodunun en üst kısmında, yöntem tarafından kullanılacak UI nesnelerinin yerel değişkenlerini tanımlayan bir Variable Declarations bölgesi vardır.
Bu yöntemde hem UIItemWindow hem de UIItemEdit UICalculatorWindow sınıfı kullanarak erişilen özelliklerdir ve bu daha sonra UIMap.cs dosyasında tanımlanır.
Bundan sonra, klavyeden Hesap Makinesi uygulamasına AddItemsParams nesnesinin özelliklerini kullanarak metin gönderen satırlar bulunur.
VerifyTotal() yöntemi çok benzer bir yapıya sahiptir ve aşağıdaki onay kodunu içerir.
// Verify that 'Unknown Name' text box's property 'Text' equals '9. '
Assert.AreEqual(
this.VerifyTotalExpectedValues.UIItemEditText,
uIItemEdit.Text);
Windows Hesap Makinesi uygulaması geliştiricisi, denetime ilişkin herkes tarafından kullanılan bir ad sağlamadığından metin kutusu adı bilinmeyen olarak listelenir. Gerçek değer testin başarısız olmasına neden olabilecek şekilde beklenen değere eşit değilse Assert.AreEqual yöntemi başarısız olur. Ayrıca, beklenen değerin ardından bir boşluğun geldiği ondalık bir noktayı içerdiğine dikkat edin. Bu belirli testin işlevselliğini herhangi bir zamanda değiştirmek isterseniz, ondalık noktaya ve boşluğa izin vermelisiniz.
UIMap özellikleri
Her özellik kodu da sınıf genelinde çok standarttır. AddItemsParams özelliği için aşağıdaki kod AddItems() yönteminde kullanılır.
public virtual AddItemsParams AddItemsParams
{
get
{
if ((this.mAddItemsParams == null))
{
this.mAddItemsParams = new AddItemsParams();
}
return this.mAddItemsParams;
}
}
Özelliğin döndürmeden önceki değere sahip olması için mAddItemsParams adlı özel bir yerel değişken kullandığından emin olun. Geri döndüğü nesneye ilişkin özellik ve sınıf adları aynıdır. Sınıf daha sonra UIMap.cs dosyasında tanımlanır.
Bir özellik tarafından döndürülen her sınıf benzer şekilde yapılandırılmıştır. Aşağıdaki AddItemsParams sınıfıdır.
/// <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
}
UIMap.cs dosyasındaki tüm sınıflarda olduğu gibi, bu sınıf GeneratedCodeAttribute öğesiyle başlar. Bu küçük sınıfta daha önce anlatılmış olan UIMap.AddItems() yönteminde kullanılan Keyboard.SendKeys yönteminin parametreleri olarak kullanılmak üzere dize tanımlayan bir Fields bölümü bulunur. Bu dize alanlarındaki değerleri, bu parametreleri kullanılan yöntem çağrılmadan önce değiştirmek için kod yazabilirsiniz.
UIMap.cs
Varsayılan olarak, bu dosya yöntemleri ya da özellikleri olmayan kısmi bir UIMap sınıfı içerir.
UIMap sınıfı
UIMap Sınıfının işlevselliğini genişletmek için burada özel kod yaratabilirsiniz. Bu dosyada oluşturduğunuz kod, test her değiştirildiğinde Coded UI Test Builder tarafından yeniden oluşturulmayacaktır.
UIMap başvurusunun tüm parçaları, UIMap sınıfının diğer herhangi bir parçasındaki yöntemleri ve özellikleri kullanabilir.
CodedUITest1 cs
Bu dosya Kodlanmış Arayüzü Testi Oluşturucusu tarafından oluşturulur fakat test her değiştirildiğinde değiştirilmez; bu nedenle bu dosyadaki kodu değiştirebilirsiniz. Dosya adı, sizin testi oluştururken belirttiğiniz addan üretilir.
CodedUITest1 sınıfı
Varsayılan olarak, bu dosya yalnızca bir sınıf tanımını içerir.
[CodedUITest]
public class CodedUITest1
Test çatısını bir test uzantısı olarak kabul etmeye izin veren T:Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute öğesi sınıfa otomatik olarak uygulanır. Ayrıca, bunun kısmi bir sınıf olmadığına dikkat edin. Tüm sınıf kodu bu dosyada tutulur.
CodedUITest1 özellikleri
Sınıf, dosyanın altında bulunan iki varsayılan özellik içerir. Bunlar değiştirilmemelidir.
/// <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
CodedUITest1 yöntemleri
Varsayılan olarak, sınıf tek bir yöntem içerir.
public void CodedUITestMethod1()
Bu yöntem, UIMap Class hakkındaki bölümde açıklanmış olan testinizi kaydederken belirlediğiniz her bir UIMap yöntemini çağırır.
Kaldırılmamışsa Additional test attributes, olarak adlandırılan bir bölge, isteğe bağlı iki yöntem içerir.
// 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();
}
MyTestInitialize() yöntemi kendisine uygulanan diğer test yöntemlerinden önce bu yöntemi çağırmak için test çerçevesini belirten TestInitializeAttribute öğesine sahiptir. Benzer şekilde, MyTestCleanup() yöntemine TestCleanupAttribute uygulanmıştır. Bu, test çerçevesine diğer test yöntemleri çağrıldıktan sonra söz konusu yöntemi çağırmasını söyler. Bu yöntemlerin kullanılması isteğe bağlıdır. Bu test için, UIMap.LaunchCalculator() yöntemi MyTestInitialize() konumunda çağrılabilir ve UIMap.CloseCalculator() yöntemi MyTestCleanup() konumundan çağrılabilir (CodedUITest1Method1() konumu yerine).
CodedUITestAttribute öğesini kullanarak bu sınıfa daha fazla yöntem eklerseniz, test çerçevesi her yöntemi testin bir parçası olarak çağıracaktır.
UIMap.uitest
Bu, kodlanmış UI testi kaydının ve bunun tüm parçalarının yapısını temsil eden bir XML dosyasıdır. Bunlar, bu sınıfların özelliklerine ve yöntemlere ek olarak eylemleri ve dersleri içerir. UIMap.Designer.cs dosyası testin yapısını yeniden oluşturmak için Kodlanmış UI Oluşturucusu tarafından oluşturulan kodu içerir ve test çerçevesine bağlantı sağlar.
UIMap.uitest dosyası doğrudan düzenlenemez. Ancak, testi değiştirmek için, otomatik olarak UIMap.uitest dosyasını ve UIMap.Designer.cs dosyasını değiştiren Kodlu UI Oluşturucu'yu kullanabilirsiniz.
Ayrıca bkz.
Görevler
Kodlanmış UI Testi Nasıl Oluşturulur
Nasıl yapılır: Kodlanmış UI Test Oluşturucusunu Kullanarak UI Denetimleri ve Doğrulama Kodu Ekleme
Başvuru
Microsoft.VisualStudio.TestTools.UITesting.WinControls
Microsoft.VisualStudio.TestTools.UITesting.HtmlControls
Microsoft.VisualStudio.TestTools.UITesting.WpfControls
Kavramlar
Kodlanmış UI Testleri için En İyi Yöntemler
Kodlanmış UI Testleri ve Eylem Kayıtları için Desteklenen Yapılandırmalar ve Platformlar