Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
MSTest, testleri tanımlamak ve özelleştirmek için özel öznitelikler kullanır.
Test çerçevesine daha net bir genel bakış sağlamaya yardımcı olmak için, bu bölüm ad alanının üyelerini Microsoft.VisualStudio.TestTools.UnitTesting ilgili işlevsellik grupları halinde düzenler.
Not
Adları "Öznitelik" ile biten öznitelikler, sonunda "Öznitelik" ile veya olmadan kullanılabilir. Parametresiz oluşturucuya sahip öznitelikler parantezle veya parantez olmadan yazılabilir. Aşağıdaki kod örnekleri aynı şekilde çalışır:
[TestClass()]
[TestClassAttribute()]
[TestClass]
[TestClassAttribute]
Test sınıflarını ve yöntemlerini tanımlamak için kullanılan öznitelikler
Her test sınıfının özniteliği ve TestClass her test yönteminin TestMethod özniteliği olmalıdır.
TestClassAttribute
TestClass özniteliği, testleri ve isteğe bağlı olarak başlatma veya temizleme yöntemlerini içeren bir sınıfı işaretler.
Bu öznitelik, varsayılan davranışı değiştirmek veya genişletmek için genişletilebilir.
Örnek:
[TestClass]
public class MyTestClass
{
}
TestMethodAttribute
TestMethod özniteliği, çalıştırılacak gerçek test yöntemini tanımlamak için içinde TestClass kullanılır.
yöntemi , publicveya void (MSTest v3.3 ile başlayarak) olarak Tasktanımlanan bir örnek ValueTask yöntemi olmalıdır. İsteğe bağlı olarak olabilir async ancak olmamalıdır async void.
DataRow özniteliği, DynamicData özniteliği veya test yöntemine test çalışması verileri sağlayan benzer bir öznitelikle işaretlenmediği sürece yöntemin parametresi sıfır olmalıdır.
Aşağıdaki örnek test sınıfını göz önünde bulundurun:
[TestClass]
public class MyTestClass
{
[TestMethod]
public void TestMethod()
{
}
}
Veri temelli test için kullanılan öznitelikler
Veri temelli testleri ayarlamak için aşağıdaki öğeleri kullanın. Daha fazla bilgi için bkz . Veri temelli birim testi oluşturma ve Veri kaynağı tanımlamak için yapılandırma dosyası kullanma.
Tavsiye
MSTest, birleştirici testi yerel olarak desteklemez, ancak açık kaynak Combinatorial.MSTest NuGet paketini kullanarak bu özelliği ekleyebilirsiniz. Topluluk tarafından etkin bir şekilde korunur ve GitHub'da kullanılabilir. Bu paket Microsoft tarafından korunmaz.
DataRowAttribute
DataRow özniteliği, aynı test yöntemini birden çok farklı girişle çalıştırmanızı sağlar. Bir test yönteminde bir veya birden çok kez görünebilir. TestMethod özniteliğiyle birleştirilmelidir.
Bağımsız değişken sayısı ve türleri, test yöntemi imzası ile tam olarak eşleşmelidir. Test yöntemi parametreleriyle uyumlu satır içi bağımsız değişkenlerle DataRowAttribute kullanımını gösteren geçerli bir test sınıfının aşağıdaki örneğini göz önünde bulundurun:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, "message", true, 2.0)]
public void TestMethod1(int i, string s, bool b, float f)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" })]
public void TestMethod2(string[] lines)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(null)]
public void TestMethod3(object o)
{
// Omitted for brevity.
}
[TestMethod]
[DataRow(new string[] { "line1", "line2" }, new string[] { "line1.", "line2." })]
public void TestMethod4(string[] input, string[] expectedOutput)
{
// Omitted for brevity.
}
}
Not
özelliğini kullanarak birden çok giriş paramsyakalayabilirsinizDataRowAttribute.
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, 3, 4)]
public void TestMethod(params int[] values) {}
}
Geçersiz birleşim örnekleri:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2)] // Not valid, we are passing 2 inline data but signature expects 1
public void TestMethod1(int i) {}
[TestMethod]
[DataRow(1)] // Not valid, we are passing 1 inline data but signature expects 2
public void TestMethod2(int i, int j) {}
[TestMethod]
[DataRow(1)] // Not valid, count matches but types do not match
public void TestMethod3(string s) {}
}
Not
MSTest v3'den başlayarak, tam olarak 2 dizi geçirmek istediğinizde, ikinci diziyi bir nesne dizisinde sarmalamanız gerekmez.
Önce:[DataRow(new string[] { "a" }, new object[] { new string[] { "b" } })]v3 ile bakmak:[DataRow(new string[] { "a" }, new string[] { "b" })]
Özelliğini ayarlayarak DataRowAttribute Visual Studio'da kullanılan görünen adı ve her örneği DisplayName için günlüğe kaydedilenleri değiştirebilirsiniz.
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, 2, DisplayName = "Functional Case FC100.1")]
public void TestMethod(int i, int j) {}
}
ayrıca DataRowdevralarak kendi özelleştirilmiş DataRowAttribute özniteliğinizi de oluşturabilirsiniz.
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyCustomDataRowAttribute : DataRowAttribute
{
}
[TestClass]
public class TestClass
{
[TestMethod]
[MyCustomDataRow(1)]
public void TestMethod(int i) {}
}
Başlatma ve temizleme sağlamak için kullanılan öznitelikler
Birden çok test için ortak olan kurulum ve temizleme ayrı bir yönteme ayıklanabilir ve örneğin her test öncesinde uygun zamanda çalıştırmak için aşağıda listelenen özniteliklerden biriyle işaretlenebilir. Daha fazla bilgi için bkz . Birim testinin anatomisi.
Derleme düzeyi
Derlemeniz yüklendikten hemen sonra AssemblyInitialize özniteliği çağrılır ve derlemeniz yüklenmeden hemen önce AssemblyCleanup özniteliği çağrılır.
Bu özniteliklerle işaretlenmiş yöntemler, static voidile işaretlenmiş bir sınıfta static Task, static ValueTask veya TestClassAttribute (MSTest v3.3 ile başlayarak) olarak tanımlanmalı ve yalnızca bir kez görünmelidir. Başlatma bölümü TestContext türünde bir parametre gerektirir ve temizleme işlemi parametre gerektirmez veya MSTest 3.8 ile başlayarak TestContexttüründe bir parametreye sahip olabilir.
[TestClass]
public class MyTestClass
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
}
[AssemblyCleanup]
public static void AssemblyCleanup() // Starting with MSTest 3.8, it can be AssemblyCleanup(TestContext testContext)
{
}
}
Sınıf düzeyi
ClassInitialize özniteliği, sınıfınız yüklenmeden hemen önce çağrılır (ancak statik oluşturucudan sonra) ve sınıfınız kaldırıldıktan hemen sonra ClassCleanup çağrılır.
Önemli
Varsayılan olarak, ClassCleanupAttribute derlemenin son testinde tetiklenir (benzer şekilde AssemblyCleanupAttribute). Özniteliğindeki CleanupBehavior ayarlayarak bu davranışı değiştirebilirsiniz. Alternatif olarak, ClassCleanupExecutionAttributederleme özniteliğini kullanarak bu davranışı derleme için genel olarak ayarlayabilirsiniz.
Devralma davranışını denetlemek de mümkündür: yalnızca InheritanceBehavior.Nonekullanan geçerli sınıf için veya InheritanceBehavior.BeforeEachDerivedClasskullanan tüm türetilmiş sınıflar için.
Bu özniteliklerle işaretlenmiş yöntemler, içinde veya static voidstatic Task (MSTest v3.3 ile başlayarak) olarak static ValueTasktanımlanmalı ve yalnızca bir TestClasskez görünmelidir. Başlatma bölümü TestContext türünde bir parametre gerektirir ve temizleme işlemi parametre gerektirmez veya MSTest 3.8 ile başlayarak TestContexttüründe bir parametreye sahip olabilir.
[TestClass]
public class MyTestClass
{
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
}
[ClassCleanup]
public static void ClassCleanup() // Starting with MSTest 3.8, it can be ClassCleanup(TestContext testContext)
{
}
}
Test düzeyi
testiniz başlatılmadan hemen önce TestInitialize özniteliği çağrılır ve testiniz tamamlandıktan hemen sonra TestCleanup çağrılır.
TestInitializeAttribute, sınıf oluşturucusununkine benzer ancak genellikle uzun veya zaman uyumsuz başlatmalar için daha uygundur. TestInitializeAttribute, her zaman oluşturucudan sonra çağrılır ve (veri odaklı testlerin her bir girdisidahil) her test için çağrılır.
TestCleanupAttribute sınıfına Dispose (veya DisposeAsync) benzer, ancak genellikle uzun veya zaman uyumsuz temizlemeler için daha uygundur.
TestCleanupAttribute her zaman DisposeAsync/Dispose hemen önce çağrılır ve her test için (veriye dayalı testlerin her girişi dahil olmak üzere) çağrılır.
Bu özniteliklerle işaretlenmiş yöntemler , void veya Task (MSTest v3.3 ile başlayarak), içinde parametresiz ValueTaskolmalı ve bir veya birden çok kez görünmelidirTestClass.
[TestClass]
public class MyTestClass
{
[TestInitialize]
public void TestInitialize()
{
}
[TestCleanup]
public void TestCleanup()
{
}
}
Test yürütmeyi denetlemek için kullanılan öznitelikler
Aşağıdaki öznitelikler, testlerin yürütülürken kullandığı yöntemi değiştirmek için kullanılabilir.
TimeoutAttribute
Timeout özniteliği, bir test yönteminin çalışmasına izin verilen milisaniye cinsinden en uzun süreyi belirtmek için kullanılabilir. Test yöntemi belirtilen süreden daha uzun çalışırsa, test durdurulup başarısız olarak işaretlenir.
Bu öznitelik herhangi bir test yöntemine veya herhangi bir fikstür yöntemine (başlatma ve temizleme yöntemleri) uygulanabilir. Runsettings dosyasının zaman aşımı özelliklerini kullanarak tüm test yöntemleri veya tüm test fikstür yöntemleri için genel olarak zaman aşımını belirtmek de mümkündür.
Not
Zaman aşımının kesin olması garanti değildir. Belirtilen süre geçtikten sonra test durdurulacak, ancak adımın iptal edilmesi daha uzun sürebilir.
Zaman aşımı özelliği kullanılırken, test yöntemini çalıştırmak için ayrı bir iş parçacığı/görev oluşturulur. Ana iş parçacığı/görev, zaman aşımını izlemek ve zaman aşımına ulaşılırsa yöntem iş parçacığını/görevini izlemekle sorumludur.
MSTest 3.6'dan başlayarak, işbirliğine dayalı iptali etkinleştirmek için özniteliğinde (veya genel olarak runsettings aracılığıyla) özellik belirtebilirsiniz CooperativeCancellation . Bu modda, yöntem, tipik async bir yöntemde yaptığınız gibi sinyal verilip verirseniz iptal belirtecini denetlemek ve testi durdurmakla sorumludur. Bu mod daha yüksek performanslıdır ve iptal işlemi üzerinde daha hassas denetim sağlar. Bu mod hem zaman uyumsuz hem de eşitleme yöntemlerine uygulanabilir.
STATestClassAttribute
Bir test sınıfına uygulandığında, STATestClass özniteliği, sınıftaki tüm test yöntemlerinin (ve [ClassInitialize] ve [ClassCleanup] yöntemlerinin) tek iş parçacıklı bir dairede (STA) çalıştırılması gerektiğini belirtir. Bu öznitelik, test yöntemleri STA gerektiren COM nesneleriyle etkileşime geçtiğinde kullanışlıdır.
Not
Bu yalnızca Windows ve sürüm 3.6 ve sonraki sürümlerde desteklenir.
STATestMethodAttribute
Bir test yöntemine uygulandığında, STATestMethod özniteliği, test yönteminin tek iş parçacıklı bir STA modeli (Single-Threaded Apartment) kullanılarak çalıştırılması gerektiğini gösterir. Bu öznitelik, test yöntemi STA gerektiren COM nesneleriyle etkileşime geçtiğinde kullanışlıdır.
Not
Bu yalnızca Windows ve sürüm 3.6 ve sonraki sürümlerde desteklenir.
ParallelizeAttribute
Varsayılan olarak, MSTest testleri sıralı bir sırada çalıştırır. Paralel çalıştırma için derleme düzeyi özniteliği kullanılabilir. Paralelliğin sınıf düzeyinde mi (birden çok sınıf paralel olarak çalıştırılabilir, ancak belirli bir sınıftaki testler sırayla çalıştırılır) yoksa yöntem düzeyinde mi olacağını belirtebilirsiniz.
Paralel yürütme için kullanılacak en fazla iş parçacığı sayısını belirtmek de mümkündür. Değeri 0 (varsayılan değer), iş parçacığı sayısının makinedeki mantıksal işlemci sayısına eşit olduğu anlamına gelir.
Paralelliği runsettings dosyasının paralelleştirme özellikleri aracılığıyla belirtmek de mümkündür.
DoNotParallelizeAttribute
DoNotParallelize özniteliği, belirli bir derlemedeki testlerin paralel yürütülmesini önlemek için kullanılabilir. Bu öznitelik derleme düzeyinde, sınıf düzeyinde veya yöntem düzeyinde uygulanabilir.
Not
Varsayılan olarak, MSTest testleri sıralı olarak çalıştırır; bu nedenle yalnızca paralel hale getiren derleme düzeyi özniteliğini uyguladıysanız bu özniteliği kullanmanız gerekir.
RetryAttribute
Retry özniteliği MSTest 3.8'de tanıtıldı. Bu öznitelik, başarısız olduğunda veya zaman aşımlarında test yönteminin yeniden denenmeye neden olur. En fazla yeniden deneme denemesi sayısını, yeniden denemeler arasındaki gecikme süresini ve sabit veya üstel olan bir gecikme geri alma türünü belirtmenize olanak tanır.
Bir test yönteminde yalnızca bir RetryAttribute bulunması beklenir ve RetryAttributeTestMethodile işaretlenmemiş yöntemlerde kullanılamaz.
Not
RetryAttribute soyut bir RetryBaseAttribute'den türetilmiştir. Yerleşik RetryAttribute gereksinimlerinizi karşılamazsa kendi yeniden deneme uygulamalarınızı da oluşturabilirsiniz.
Yardımcı programlar öznitelikleri
DeploymentItemAttribute
DeploymentItem özniteliği, dağıtım öğeleri olarak belirtilen dosya veya klasörleri dağıtım dizinine kopyalamak için kullanılır (özel çıkış yolu eklenmeden, kopyalanan dosyalar proje klasörünün içindeki TestResults klasörde yer alır). Dağıtım dizini, test projesi DLL'siyle birlikte tüm dağıtım öğelerinin bulunduğu yerdir.
Test sınıflarında (TestClass özniteliğiyle işaretlenmiş sınıflar) veya test yöntemlerinde (TestMethod özniteliğiyle işaretlenmiş yöntemler) kullanılabilir.
Kullanıcılar birden fazla öğe belirtmek için özniteliğin birden çok örneğine sahip olabilir.
Ve burada oluşturucularını görebilirsiniz.
Örnek
[TestClass]
[DeploymentItem(@"C:\classLevelDepItem.xml")] // Copy file using some absolute path
public class UnitTest1
{
[TestMethod]
[DeploymentItem(@"..\..\methodLevelDepItem1.xml")] // Copy file using a relative path from the dll output location
[DeploymentItem(@"C:\DataFiles\methodLevelDepItem2.xml", "SampleDataFiles")] // File will be added under a SampleDataFiles in the deployment directory
public void TestMethod1()
{
string textFromFile = File.ReadAllText("classLevelDepItem.xml");
}
}
Uyarı
Dosyaları dağıtım dizinine kopyalamak için bu özniteliğin kullanılması önerilmez.
ExpectedExceptionAttribute
ExpectedException özniteliği, test yönteminin oluşturması beklenen özel durumu tanımlar. Beklenen özel durum oluşturulursa ve özel durum iletisi beklenen iletiyle eşleşirse test geçer.
Uyarı
Bu öznitelik geriye dönük uyumluluk için var ve yeni testler için önerilmez. Bunun yerine Assert.ThrowsException (veya MSTest 3.8 ve üzerini kullanıyorsanız Assert.ThrowsExactly) yöntemini kullanın.
Meta veri öznitelikleri
Aşağıdaki öznitelikler ve bunlara atanan değerler, belirli bir test yönteminin Visual StudioÖzellikler penceresinde görünür. Bu özniteliklere testin kodu aracılığıyla erişilmesi amaçlanmamıştır. Bunun yerine, visual studio'nun IDE'si aracılığıyla veya Visual Studio test altyapısı aracılığıyla testin kullanım veya çalıştırma yöntemlerini etkiler. Örneğin, bu özniteliklerden bazıları Test Yöneticisi penceresinde ve Test Sonuçları penceresinde sütunlar olarak görünür; bu da testleri ve test sonuçlarını gruplandırmak ve sıralamak için bunları kullanabileceğiniz anlamına gelir. Bu tür özniteliklerden biri, testlere rastgele meta veriler eklemek için kullandığınız özniteliğidir TestPropertyAttribute.
Örneğin, testi ile [TestProperty("Feature", "Accessibility")]işaretleyerek bu testin kapsadığı bir "test geçişi" adını depolamak için kullanabilirsiniz. İsterseniz, ile [TestProperty("ProductMilestone", "42")]olan test türünün bir göstergesini depolamak için de kullanabilirsiniz. Bu özniteliği kullanarak oluşturduğunuz özellik ve atadığınız özellik değeri Visual Studio Özellikleri penceresinde Teste özgü başlığı altında görüntülenir.
- DescriptionAttribute
- IgnoreAttribute
- OwnerAttribute
- PriorityAttribute
- TestCategoryAttribute
- TestPropertyAttribute
- WorkItemAttribute
Aşağıdaki öznitelikler, bir takım projesinin proje hiyerarşisindeki Team Foundation Server varlıklarla süsledikleri test yöntemini ilişkilendirmektedir: