Aracılığıyla paylaş


Öğretici: .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, .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. MSTest, aralarından seçim yapabileceğiniz üç test çerçevesinden biridir. Diğerleri xUnit ve nUnit.

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

  2. çözümünü açın> .NET sınıf kitaplığı oluşturun.

  3. Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.

    1. Solution Explorer'da çözüme sağ tıklayın ve Add>Yeni proje öğesini seçin.

    2. Yeni proje ekle sayfasında, arama kutusuna mstest kodunu girin. Dil listesinden C# veya Visual Basic seçin ve ardından Platform listesinden Tüm platformlar'yi seçin.

    3. MSTest Test Projesi şablonunu seçin ve ardından Sonraki'yiseçin.

    4. Yeni projenizi yapılandırın sayfasında, Proje adı kutusuna 'StringLibraryTest' yazın. Ardından İleri'yi seçin.

    5. Ek bilgiler sayfasında Framework kutusunda .NET 10 öğesini seçin. Test çalıştırıcısı için Microsoft.Testing.Platform öğesini seçin ve ardından Create öğesini seçin.

    MSTest Test Projesi için ek bilgi girin

  4. Visual Studio projeyi oluşturur ve aşağıdaki kodla kod penceresinde sınıf dosyasını açar. Kullanmak istediğiniz dil gösterilmiyorsa, sayfanın üst kısmındaki dil seçiciyi değiştirin.

    namespace StringLibraryTest
    {
    
        [TestClass]
        public sealed class Test1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class Test1
            <TestMethod>
            Sub TestSub()
    
            End Sub
        End Class
    End Namespace
    

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

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

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

  2. ".NET sınıf kitaplığı oluşturun kısmında oluşturduğunuz çözümünü açın."

  3. Solution Explorer'da Yeni Proje'i seçin veya Komut Paleti'nden .NET: Yeni Proje'yi seçin.

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

    Proje şablonu aşağıdaki kodla StringLibraryTest/Test1.cs oluşturur:

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

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

    [TestClass] ile etiketlenmiş 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.

  1. Terminali açın ve StringLibrary ve ShowCase projelerini içeren öğreticiler klasörüne gidin.

  2. Yeni bir MSTest test projesi oluşturun:

    dotnet new mstest -n StringLibraryTest
    

    Proje şablonu aşağıdaki kodla StringLibraryTest/Test1.cs oluşturur:

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

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

    [TestClass] ile etiketlenmiş 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ı ekleyin

StringLibrary sınıfıyla test projesinin çalışabilmesi için StringLibraryTest projesine StringLibrary projesine ait bir başvuru ekleyin.

  1. Solution Explorer'da StringLibraryTest projesinin Dependencies düğümüne sağ tıklayın ve bağlam menüsünden Add Project Reference öğesini seçin.

  2. Başvuru Yöneticisi iletişim kutusunda StringLibrary'nin yanındaki kutuyu seçin.

    StringLibraryTest için proje başvurusu olarak StringLibrary ekleyin.

  3. Tamam'ı seçin.

  1. Solution Explorer 'StringLibraryTest' Projesine sağ tıklayın ve Proje Başvurusu Ekle'ı seçin.

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

  1. StringLibraryTest klasörüne gidin ve proje başvuruyu ekleyin:

    cd StringLibraryTest
    dotnet add reference ../StringLibrary/StringLibrary.csproj
    

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

Birim testi çalıştırıldığında, TestClassAttribute özniteliğiyle işaretlenmiş bir sınıftaki TestMethodAttribute özniteliğiyle işaretlenmiş her yöntem otomatik olarak yürütülü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 yaygın 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 İşlev
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şvuruyorsa doğrulama başarısız olur.
Assert.IsFalse Bir koşulun falseolarak doğrulandığını teyit eder. "Koşul trueolduğunda assert başarısız olur."
Assert.IsNotNull Bir nesnenin nullolmadığını doğrular. Nesne nullise doğrulama başarısız olur.

"Assert.Throws yöntemini de bir test yönteminde, atması beklenen özel durum türünü belirtmek için kullanabilirsiniz." Belirtilen istisna oluşturulmazsa test başarısız olur.

StringLibrary.StartsWithUpper yöntemini test ederken, 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 harf karakterden başka bir şeyle başlayan 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, ayrıca boş bir dizeyi (String.Empty) ve null dizesini başarıyla işlediğinden emin olmak istersiniz. Boş dize, karakter içermeyen ve 0 olan Length dizedir. Dize null , başlatılmamış bir dizedir. Statik yöntem olarak doğrudan StartsWithUpper çağırabilir ve tek bir String bağımsız değişken geçirebilirsiniz. Alternatif olarak, StartsWithUpper değişkeninde string, null için uzantı metodu olarak çağırabilirsiniz.

Her biri bir dize dizisindeki her öğe için bir Assert yöntem çağıran üç yöntem tanımlayacaksınız. Test hatası durumunda görüntülenecek bir hata iletisi belirtmenize olanak tanıyan bir yöntem aşırı yüklemesini çağıracaksınız. İleti, hataya neden olan dizeyi tanımlar.

Test yöntemlerini oluşturmak için:

  1. Test1.cs veya Test1.vb kod penceresinde kodu aşağıdaki kodla değiştirin:

    using UtilityLibraries;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public sealed class Test1
        {
            [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, $"Expected for '{word}': true; Actual: {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, $"Expected for '{word}': false; Actual: {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, $"Expected for '{word ?? "<null>"}': false; Actual: {result}");
                }
            }
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    Imports UtilityLibraries
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class UnitTest1
            <TestMethod>
            Public Sub TestStartsWithUpper()
                ' Tests that we expect to return true.
                Dim words() As String = {"Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"}
                For Each word In words
                    Dim result As Boolean = word.StartsWithUpper()
                    Assert.IsTrue(result,
                           $"Expected for '{word}': true; Actual: {result}")
                Next
            End Sub
    
            <TestMethod>
            Public Sub TestDoesNotStartWithUpper()
                ' Tests that we expect to return false.
                Dim words() As String = {"alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " "}
                For Each word In words
                    Dim result As Boolean = word.StartsWithUpper()
                    Assert.IsFalse(result,
                           $"Expected for '{word}': false; Actual: {result}")
                Next
            End Sub
    
            <TestMethod>
            Public Sub DirectCallWithNullOrEmpty()
                ' Tests that we expect to return false.
                Dim words() As String = {String.Empty, Nothing}
                For Each word In words
                    Dim result As Boolean = StringLibrary.StartsWithUpper(word)
                    Assert.IsFalse(result,
                           $"Expected for '{If(word Is Nothing, "<null>", word)}': false; Actual: {result}")
                Next
            End Sub
        End Class
    End Namespace
    

    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. Menü çubuğunda Dosya>Test1.cs Olarak Kaydet veya Dosya>Test1.vb Olarak Kaydet seçin. Dosyayı Farklı Kaydet iletişim kutusunda, Kaydet düğmesinin yanındaki oku seçin ve Kodlama ile Kaydet'i seçin.

  3. Farklı Kaydet'i Onayla iletişim kutusunda, dosyayı kaydetmek için Evet düğmesini seçin.

  4. Gelişmiş Kaydetme Seçenekleri iletişim kutusunda, Kodlama açılır listesinden Unicode (imzalı UTF-8) - Codepage 65001'ü seçin ve Tamam'a tıklayın.

    Kaynak kodunuzu UTF8 ile kodlanmış bir dosya olarak kaydedemezseniz Visual Studio bunu ASCII dosyası olarak kaydedebilirsiniz. Bu durumda, çalışma zamanı ASCII aralığının dışındaki UTF8 karakterlerinin kodunu doğru bir şekilde çözmez ve test sonuçları doğru değildir.

  5. Menü çubuğunda Test>Tüm Testleri Çalıştıröğesini seçin. Test Gezgini penceresi açılmazsa, Test>Test Gezginiseçerek açın. Üç test, Geçirilen Testler bölümünde listelenmektedir ve Özet bölümünde test çalıştırmasının sonucu bildirilmektedir.

    Test Gezgini penceresi , başarıyla geçen testlerle

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

    using UtilityLibraries;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public sealed class Test1
        {
            [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, $"Expected for '{word}': true; Actual: {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, $"Expected for '{word}': false; Actual: {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, $"Expected for '{word ?? "<null>"}': false; Actual: {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. Solution Explorer'da çözüme sağ tıklayın ve Build veya Komut Paleti'nden .NET: Build öğ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'ı seçin.

    Visual Studio Code Test Explorer

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

    using UtilityLibraries;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public sealed class Test1
        {
            [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, $"Expected for '{word}': true; Actual: {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, $"Expected for '{word}': false; Actual: {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, $"Expected for '{word ?? "<null>"}': false; Actual: {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 ve testleri çalıştırın:

    dotnet test
    

    Testler geçmelidir.

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. words yöntemindeki TestDoesNotStartWithUpper dizisini "Error" dizesini içerecek şekilde değiştirin.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
    Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " }
    
    
  1. Menü çubuğundan Test>Tüm Testleri Çalıştır seçerek testi çalıştırın. Test Gezgini penceresi iki testin başarılı ve birinin başarısız olduğunu gösterir.

    Test gezgini penceresi, başarısız testlerle,

  2. Başarısız testi seçin TestDoesNotStartWith.

    Test Gezgini penceresi, doğrulama tarafından üretilen iletiyi görüntüler: "Assert.IsFalse başarısız oldu. 'Error' için beklenen: false; gerçek: True." Hata nedeniyle, "Error" sonrasında dizideki dizeler test edilmedi.

    Test Gezgini penceresi IsFalse doğrulama hatasını gösteriyor

  1. 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 bekleniyor: false; gerçek: true". Hata nedeniyle, "Error" sonrasında dizideki hiçbir dize test edilmedi.

    Visual Studio Code Başarısız Test

  1. Testleri çalıştırın:

    dotnet test
    

    Çı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 bekleniyor: false; gerçek: true". Hata nedeniyle, "Error" sonrasında dizideki hiçbir dize test edilmedi.

  1. Eklediğiniz "Error" dizesini kaldırın.

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

Kütüphanenin Sürüm versiyonunu test edin

Artık tüm testler kitaplığın Hata Ayıklama derlemesi çalıştırılırken geçtiğine göre, kitaplığın Kullanıma Sunma derlemesini de testleri bir kez daha çalıştırarak değerlendirin. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Hata Ayıklama (Debug) ve Sürüm yapıları arasında farklı davranışlar üretebilir.

Yayın sürümünü test etmek için:

  1. Visual Studio araç çubuğunda derleme yapılandırmasını Debug yerine Release olarak değiştirin.

  2. Solution Explorer'da StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Build seçin.

  3. Menü çubuğundan Test>Tüm Testleri Çalıştır seçerek birim testlerini çalıştırın. Testler geçer.

Yayın derleme yapılandırması ile testleri yürütün:

dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release

Testler geçer.

Yayın derleme yapılandırması ile testleri yürütün:

dotnet test --configuration Release

Testler geçer.

Testlerde hata ayıklama

IDE olarak Visual Studio kullanıyorsanız, birim testi projenizi kullanarak kodda hata ayıklamak için Tutorial: .NET konsol uygulamasında hata ayıklama içinde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTests projesine sağ tıklayın ve bağlam menüsünden Hata Ayıklama Testleri seçin.

Visual Studio, 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.

IDE'niz olarak Visual Studio Code kullanıyorsanız, birim testi projenizi kullanarak kodda hata ayıklamak için Debug a .NET konsol uygulaması içinde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTest/Test1.cs açın ve 7 ile 8. satırlar arasındaki geçerli dosyada Hata Ayıklama Testleri'ni seçin. Bulamıyorsanız, Ctrl+Shift+P tuşlarına basarak komut paletini açın ve Pencereyi Yeniden Yükle yazın.

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'te birim testi

Kaynakları temizleme

GitHub, 30 günlük işlem yapılmadıktan sonra Codespace'inizi otomatik olarak siler. Bu serideki diğer öğreticileri keşfetmeyi planlıyorsanız, Codespace'inizi (kod çalışma alanı) hazır durumda bırakabilirsiniz. .NET SDK'yı indirmek için .NET sitesini ziyaret etmeye hazırsanız Codespace'ınızı silebilirsiniz. Codespace'ınızı silmek için bir tarayıcı penceresi açın ve Codespaces'inize gidin. Pencerede kod boşluklarınızın listesini görürsünüz. Learn öğreticisi kod alanı için girdideki üç noktayı (...) seçin. Ardından "Sil"i seçin.

Sonraki Adımlar

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

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:

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: