Birim testlerinde MSTest çerçevesini kullanma
MSTest çerçevesi Visual Studio'da birim testini destekler. Birim testlerini kodlarken ad alanında Microsoft.VisualStudio.TestTools.UnitTesting sınıfları ve üyeleri kullanın. Ayrıca, koddan oluşturulan birim testlerini iyileştirirken de bunları kullanabilirsiniz.
Çerçeve üyeleri
Birim testi ç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 öznitelik öğeleri, sonunda "Öznitelik" ile veya olmadan ve parantez içeren veya olmayan parametresiz oluşturucular için kullanılabilir. Örneğin, 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. Daha fazla bilgi için bkz . Birim testinin anatomisi.
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, davranışı güncelleş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 veya public Task
(isteğe bağlı) async
olarak public void
tanımlanan bir örnek yöntemi olmalı ve parametresiz olmalıdır.
Örnek
[TestClass]
public class MyTestClass
{
[TestMethod]
public void TestMethod()
{
}
}
[TestClass]
public class MyTestClass
{
[TestMethod]
public async Task TestMethod()
{
}
}
Veri temelli test için kullanılan öznitelikler
Veri temelli birim testlerini 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.
Datarow
, DataRowAttribute
test yöntemini çağırırken kullanılan satır içi verileri sağlamanıza olanak tanır. Bir test yönteminde bir veya birden çok kez görünebilir. veya DataTestMethodAttribute
ile TestMethodAttribute
birleştirilmelidir.
Bağımsız değişken sayısı ve türleri, test yöntemi imzası ile tam olarak eşleşmelidir.
Geçerli çağrı örnekleri:
[TestClass]
public class TestClass
{
[TestMethod]
[DataRow(1, "message", true, 2.0)]
public void TestMethod1(int i, string s, bool b, float f) {}
[TestMethod]
[DataRow(new string[] { "line1", "line2" })]
public void TestMethod2(string[] lines) {}
[TestMethod]
[DataRow(null)]
public void TestMethod3(object o) {}
[TestMethod]
[DataRow(new string[] { "line1", "line2" }, new string[] { "line1.", "line2." })]
public void TestMethod4(string[] input, string[] expectedOutput) {}
}
özelliğini kullanarak birden çok giriş yakalayabileceğinizi DataRow
de params
unutmayın.
[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(yeni dize[] { "a" }, yeni nesne[] { yeni dize[] { "b" } })] v3'te ileri: [DataRow(yeni dize[] { "a" }, yeni dize[] { "b" })]
Özelliğini ayarlayarak DisplayName
Visual Studio'da kullanılan görünen adı ve her örneği DataRowAttribute
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, öğesini devralarak DataRowAttribute
kendi özelleştirilmiş veri satırı ö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
Aşağıdaki özniteliklerden biriyle dekore edilmiş bir yöntem, belirttiğiniz anda çağrılır. Daha fazla bilgi için bkz . Birim testinin anatomisi.
Derleme
AssemblyInitialize , derlemeniz yüklendikten hemen sonra çağrılır ve derlemeniz yüklenmeden hemen önce AssemblyCleanup çağrılır.
Bu özniteliklerle işaretlenmiş yöntemler veya static Task
olarak static void
tanımlanmalı ve yalnızca bir TestClass
kez görünmelidir. Başlatma bölümü, TestContext türünde bir bağımsız değişken gerektirir ve temizleme bağımsız değişkeni yoktur.
[TestClass]
public class MyTestClass
{
[AssemblyInitialize]
public static void AssemblyInitialize(TestContext testContext)
{
}
[AssemblyCleanup]
public static void AssemblyCleanup()
{
}
}
[TestClass]
public class MyOtherTestClass
{
[AssemblyInitialize]
public static async Task AssemblyInitialize(TestContext testContext)
{
}
[AssemblyCleanup]
public static async Task AssemblyCleanup()
{
}
}
Sınıf
Sınıfınız yüklenmeden hemen önce ClassInitialize ç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.
Devralma davranışını denetlemek mümkündür: yalnızca kullanan geçerli sınıf veya kullanan InheritanceBehavior.None
InheritanceBehavior.BeforeEachDerivedClass
tüm türetilmiş sınıflar için.
Sınıf temizlemenin sınıfın sonunda mı yoksa derlemenin sonunda mı çalıştırılacağı da yapılandırılabilir (EndOfClass varsayılan ve tek sınıf temizleme davranışı olduğundan MSTest v4'ten itibaren artık desteklenmez).
Bu özniteliklerle işaretlenmiş yöntemler veya static Task
olarak static void
tanımlanmalı ve yalnızca bir TestClass
kez görünmelidir. Başlatma bölümü, TestContext türünde bir bağımsız değişken gerektirir ve temizleme bağımsız değişkeni yoktur.
[TestClass]
public class MyTestClass
{
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
}
[ClassCleanup]
public static void ClassCleanup()
{
}
}
[TestClass]
public class MyOtherTestClass
{
[ClassInitialize]
public static async Task ClassInitialize(TestContext testContext)
{
}
[ClassCleanup]
public static async Task ClassCleanup()
{
}
}
Test etme
TestInitialize , testiniz başlatılmadan hemen önce çağrılır ve testiniz tamamlandıktan hemen sonra TestCleanup çağrılır.
TestInitialize
, sınıf oluşturucusununkine benzer ancak genellikle uzun veya zaman uyumsuz başlatmalar için daha uygundur. TestInitialize
her zaman oluşturucudan sonra çağrılır ve her test için çağrılır (veri temelli testlerin her veri satırı dahil).
TestCleanup
sınıfına Dispose
(veya DisposeAsync
) benzer, ancak genellikle uzun veya zaman uyumsuz temizlemeler için daha uygundur. TestCleanup
her zaman hemen önce çağrılır DisposeAsync
/Dispose
ve her test için çağrılır (veri temelli testlerin her veri satırı dahil).
Bu özniteliklerle işaretlenmiş yöntemler veya Task
olarak void
tanımlanmalı, içinde parametresiz TestClass
olmalı ve bir veya birden çok kez görünmelidir.
[TestClass]
public class MyTestClass
{
[TestInitialize]
public void TestInitialize()
{
}
[TestCleanup]
public void TestCleanup()
{
}
}
[TestClass]
public class MyOtherTestClass
{
[TestInitialize]
public async Task TestInitialize()
{
}
[TestCleanup]
public async Task TestCleanup()
{
}
}
Onaylar ve ilgili özel durumlar
Birim testleri, çeşitli onaylar, özel durumlar ve öznitelikler kullanarak belirli uygulama davranışını doğrulayabilir. Daha fazla bilgi için bkz . Assert sınıflarını kullanma.
TestContext sınıfı
Aşağıdaki öznitelikler ve bunlara atanan değerler, belirli bir test yöntemi için Visual Studio Özellikler penceresi görünür. Bu özniteliklere birim testinin kodu aracılığıyla erişilmesi amaçlanmamıştır. Bunun yerine, visual studio'nun IDE'si veya Visual Studio test altyapısı aracılığıyla birim testinin 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, birim testlerine rastgele meta veriler eklemek için kullandığınız özniteliğidir TestPropertyAttribute. Örneğin, birim testini ile [TestProperty("TestPass", "Accessibility")]
işaretleyerek bu testin kapsadığı "test geçişi" adını depolamak için kullanabilirsiniz. İsterseniz, ile [TestProperty("TestKind", "Localization")]
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.
Deploymentıtemattribute
Dağıtım öğeleri olarak belirtilen dosya veya klasörleri dağıtım dizinine kopyalamak için sunulan DeploymentItemAttribute MSTest V2 çerçevesi (özel bir çıkış yolu eklemeden kopyalanan dosyalar proje klasörünün içindeki TestResults klasöründe olur). Dağıtım dizini, test projesi DLL'siyle birlikte tüm dağıtım öğelerinin bulunduğu yerdir.
Test sınıflarında (öznitelikle TestClass
işaretlenmiş sınıflar) veya test yöntemlerinde (öznitelikle TestMethod
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");
}
}
Yapılandırma sınıflarını test edin
Rapor oluşturmak için kullanılan öznitelikler
Bu bölümdeki öznitelikler, bir takım projesinin proje hiyerarşisindeki Team Foundation Server
varlıklarla süsledikleri test yöntemini ilişkilendirmektedir.
Özel erişimcilerle kullanılan sınıflar
Özel bir yöntem için birim testi oluşturabilirsiniz. Bu nesil, sınıfın bir nesnesinin PrivateObject örneğini oluşturan özel bir erişimci sınıfı oluşturur. PrivateObject sınıfı, özel erişimci işleminin bir parçası olarak yansıma kullanan bir sarmalayıcı sınıfıdır. PrivateType sınıfı benzerdir, ancak özel örnek yöntemlerini çağırmak yerine özel statik yöntemleri çağırmak için kullanılır.
Ayrıca bkz.
- Microsoft.VisualStudio.TestTools.UnitTesting başvuru belgeleri