Aracılığıyla paylaş


Öğretici: Visual Studio Code kullanarak bir .NET sınıf kitaplığını test edin

Bu öğreticide, bir çözüme test projesi ekleyerek birim testlerini otomatikleştirme adımları gösterilmektedir.

Önkoşullar

  • Bu öğretici, visual studio codekullanarak .NET sınıf kitaplığı oluşturma içinde oluşturduğunuz çözümle çalışır.

Birim testi projesi oluşturma

Birim testleri, geliştirme ve yayımlama sırasında otomatik yazılım testi sağlar. Bu öğreticide kullandığınız test çerçevesi MSTest'tir. MSTest, aralarından seçim yapabileceğiniz üç test çerçevesinden biridir. Diğerleri xUnit ve nUnit.

  1. Visual Studio Code'ı başlatın.

  2. Visual Studio Codekullanarak .NET sınıf kitaplığı oluşturma içinde oluşturduğunuz çözümünü açın.

  3. Çözüm Gezgini'nden Yeni Proje'seçin veya Komut Paleti'nden .NET: Yeni Projeöğesini seçin.

  4. MSTest Test Projesi seçin, "StringLibraryTest" olarak adlandırın, varsayılan dizini seçin ve Proje Oluştur seçin.

    Proje şablonu aşağıdaki koda sahip bir UnitTest1.cs dosyası oluşturur:

    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
    

    Birim testi şablonu tarafından oluşturulan kaynak kodu aşağıdakileri yapar:

    [TestClass] etiketli bir test sınıfında [TestMethod] ile etiketlenen her yöntem, birim testi çağrıldığında otomatik olarak çalıştırılır.

Proje referansı ekleme

Test projesinin StringLibrary sınıfıyla çalışması için, StringLibraryTest projesine StringLibrary projesine bir başvuru ekleyin.

  1. Çözüm Gezgini'nden 'StringLibraryTest' Projesi'ne sağ tıklayın ve Proje Başvurusu Ekle'yiseçin.

  2. "StringLibrary" öğesini seçin.

Birim testi yöntemleri ekleme ve çalıştırma

Visual Studio bir birim testi çağırdığında, TestClassAttribute özniteliğiyle işaretlenmiş bir sınıfta TestMethodAttribute özniteliğiyle işaretlenmiş her yöntemi çalıştırır. İlk hata bulunduğunda veya yöntemin içerdiği tüm testler başarılı olduğunda bir test yöntemi sona erer.

En sık kullanılan testler, Assert sınıfının üyelerini çağırır. Birçok onay yöntemi, biri beklenen test sonucu, diğeri gerçek test sonucu olan en az iki parametre içerir. Assert sınıfının en sık çağrılan yöntemlerinden bazıları aşağıdaki tabloda gösterilmiştir:

Assert yöntemleri Fonksiyon
Assert.AreEqual İki değerin veya nesnenin eşit olduğunu doğrular. Değerler veya nesneler eşit değilse onay başarısız olur.
Assert.AreSame İki nesne değişkeninin aynı nesneye başvurduğunu doğrular. Değişkenler farklı nesnelere başvuruda bulunursa doğrulama başarısızlıkla sonuçlanır.
Assert.IsFalse Bir koşulun falseolduğunu doğrular. Koşul trueise assert işlemi başarısız olur.
Assert.IsNotNull Bir nesnenin nullolmadığını doğrular. Nesne nullise doğrulama başarısız olur.

Oluşturması beklenen özel durum türünü belirtmek için bir test yönteminde Assert.ThrowsException (veya MSTest 3.8 ve üzerini kullanıyorsanız Assert.Throws ve Assert.ThrowsExactly) yöntemini de kullanabilirsiniz. Belirtilen özel durum fırlatılmadıysa test başarısız olur.

StringLibrary.StartsWithUpper yöntemini test etmek için büyük harfle başlayan birkaç dize sağlamak istiyorsunuz. Bu durumlarda yönteminin true döndürmesini beklersiniz, böylece Assert.IsTrue yöntemini çağırabilirsiniz. Benzer şekilde, büyük harfli bir karakterle başlamayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin false döndürmesini beklersiniz, böylece Assert.IsFalse yöntemini çağırabilirsiniz.

Kitaplık yönteminiz dizeleri işlediğinden, boş bir dizeyi (String.Empty) ve null dizesini başarıyla işlediğinden de emin olmak istersiniz. Boş dize, karakter içermeyen ve Length 0 olan dizedir. null dizesi, başlatılmamış olan bir dizedir. StartsWithUpper'ı doğrudan statik yöntem olarak çağırabilirsiniz ve tek bir String bağımsız değişkeni geçirebilirsiniz. İsterseniz null'ye atanmış string değişkeninde StartsWithUpper'ı extension metodu olarak çağırabilirsiniz.

Her biri bir dize dizisindeki her öğe için bir Assert yöntemi çağıran üç yöntem tanımlayacaksınız. Test hatası durumunda görüntülenecek bir hata mesajı belirtmenize imkân tanıyan bir yöntem çağrısını yapacaksınız. İleti, hataya neden olan dizeyi tanımlar.

Test yöntemlerini oluşturmak için:

  1. StringLibraryTest/UnitTest1.cs açın ve tüm kodu aşağıdaki kodla değiştirin.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using UtilityLibraries;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestStartsWithUpper()
            {
                // Tests that we expect to return true.
                string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" };
                foreach (var word in words)
                {
                    bool result = word.StartsWithUpper();
                    Assert.IsTrue(result,
                           string.Format("Expected for '{0}': true; Actual: {1}",
                                         word, result));
                }
            }
    
            [TestMethod]
            public void TestDoesNotStartWithUpper()
            {
                // Tests that we expect to return false.
                string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " " };
                foreach (var word in words)
                {
                    bool result = word.StartsWithUpper();
                    Assert.IsFalse(result,
                           string.Format("Expected for '{0}': false; Actual: {1}",
                                         word, result));
                }
            }
    
            [TestMethod]
            public void DirectCallWithNullOrEmpty()
            {
                // Tests that we expect to return false.
                string?[] words = { string.Empty, null };
                foreach (var word in words)
                {
                    bool result = StringLibrary.StartsWithUpper(word);
                    Assert.IsFalse(result,
                           string.Format("Expected for '{0}': false; Actual: {1}",
                                         word == null ? "<null>" : word, result));
                }
            }
        }
    }
    

    TestStartsWithUpper yöntemindeki büyük harfli karakterlerin testi, Yunanca büyük alfa (U+0391) harfini ve Kiril büyük harf EM'yi (U+041C) içerir. TestDoesNotStartWithUpper yöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.

  2. Değişikliklerinizi kaydedin.

Testlerinizi Oluşturma ve Çalıştırma

  1. Çözüm Gezgini 'nde çözüme sağ tıklayın ve Derle seçeneğini seçin veya Komut Paleti'nden .NET: Derleöğesini seçin.

  2. Test penceresini seçin, Testleri Çalıştır seçin veya Komut Paleti'nden Test: Tüm Testleri çalıştıröğesini seçin.

    Visual Studio Code Test Gezgini

Test hatalarını işleme

Test temelli geliştirme (TDD) yapıyorsanız, önce testleri yazarsınız ve ilk kez çalıştırdığınızda başarısız olurlar. Ardından uygulamaya testin başarılı olmasını sağlayan kod eklersiniz. Bu öğreticide, doğruladığınız uygulama kodunu yazdıktan sonra testi oluşturdunuz ve testin başarısız olduğunu görmediniz. Testin başarısız olmasını beklediğiniz zaman başarısız olduğunu doğrulamak için test girişine geçersiz bir değer ekleyin.

  1. TestDoesNotStartWithUpper yöntemindeki words dizisini "Error" dizesini içerecek şekilde değiştirin.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Düzenleyicide testin yanındaki yeşil hataya tıklayarak testleri çalıştırın.

    Çıkış, testin başarısız olduğunu gösterir ve başarısız olan test için bir hata iletisi sağlar: "Assert.IsFalse başarısız oldu. 'Error' için beklenen: false; gerçek: True. Hata nedeniyle, "Error" sonrasındaki dizideki hiçbir dize test edilmedi.

    Visual Studio Code Başarısız Test

  3. Adımda eklediğiniz "Error" dizesini kaldırın.

  4. Testi yeniden çalıştırın ve testler geçer.

Kitaplığın Sürüm sürümünü test edin

Artık tüm testler kitaplığın Debug derlemesi çalıştırılırken geçtiğine göre, kitaplığın Release derlemesinde testleri ek bir kez çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Debug ve Yayın derlemeleri arasında farklı davranışlara yol açabilir.

  1. Sürümleri derleme yapılandırmasıyla testleri çalıştırın:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Testler geçer.

Testlerde hata ayıklama

IDE'niz olarak Visual Studio Code kullanıyorsanız, birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio Code kullanarak bir .NET konsol uygulamasında hata ayıklama 'de gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTest/UnitTest1.csaçın ve 7. ve 8. satırlar arasında geçerli dosyada Hata Ayıklama Testleri'ni seçin. Bulamıyorsanız, CtrlShiftP tuşlarına basarak komut paletini açın vePencereyi Yeniden Yükle girin.

Visual Studio Code, test projesini hata ayıklayıcı ekli olarak başlatır. Yürütme, test projesine veya temel alınan kitaplık koduna eklediğiniz herhangi bir kesme noktasında durur.

Ek kaynaklar

  • .NET'de Birim testi

Sonraki adımlar

Bu öğreticide bir sınıf kitaplığını birim olarak test ettiniz. NuGet paket olarak yayımlayarak kitaplığı başkalarının kullanımına sunabilirsiniz. Nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:

Dotnet CLI kullanarak paket oluşturma ve yayımlama

Bir kitaplığı NuGet paketi olarak yayımlarsanız, diğerleri bunu yükleyip kullanabilir. Nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:

dotnet CLI kullanarak paket yükleme ve kullanma

Kitaplığın paket olarak dağıtılması gerekmez. Bunu kullanan bir konsol uygulamasıyla paketlenebilir. Konsol uygulamasını yayımlamayı öğrenmek için bu serinin önceki öğreticisine bakın:

Visual Studio Code kullanarak .NET konsol uygulaması yayımlama

Visual Studio Code uzantısı C# Dev Kit, C# uygulamaları ve kitaplıkları geliştirmeye yönelik daha fazla araç sağlar: