Share via


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ı) asyncolarak 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 DataTestMethodAttributeile 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 DataRowde 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 DataRowAttributekendi ö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 Taskolarak static void tanımlanmalı ve yalnızca bir TestClasskez 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.NoneInheritanceBehavior.BeforeEachDerivedClasstü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 Taskolarak static void tanımlanmalı ve yalnızca bir TestClasskez 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 Taskolarak void tanımlanmalı, içinde parametresiz TestClassolmalı 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()
    {
    }
}

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.