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

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

Önkoşullar

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'tir.

  1. Visual Studio’yu çalıştırın.

  2. ClassLibraryProjects Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.

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

    1. Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.

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

    3. MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 8 (Önizleme) öğesini seçin. Ardından Oluştur’u seçin.

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

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

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

    • Birim testi için kullanılan türleri içeren ad alanını içeri aktarır Microsoft.VisualStudio.TestTools.UnitTesting . C# dilinde ad alanı, GlobalUsings.cs içindeki bir global using yönerge aracılığıyla içeri aktarılır.
    • özniteliğini TestClassAttribute sınıfına UnitTest1 uygular.
    • C# veya TestSub Visual Basic'te tanımlamak TestMethod1 için özniteliğini uygularTestMethodAttribute.

    [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.

Proje başvurusu ekleme

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

  1. Çözüm Gezgini'nde StringLibraryTest projesinin Bağımlılıklar düğümüne sağ tıklayın ve bağlam menüsünden Proje Başvurusu Ekle'yi seçin.

  2. Başvuru Yöneticisi iletişim kutusunda Projeler düğümünü genişletin ve StringLibrary'nin yanındaki kutuyu seçin. Derlemeye StringLibrary başvuru eklemek, derleyicinin StringLibraryTest projesini derlerken StringLibrary yöntemlerini bulmasına olanak tanır.

  3. Tamam'ı seçin.

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

Visual Studio bir birim testi çalıştırdığında, özniteliğiyle işaretlenmiş bir sınıfta özniteliğiyle TestMethodAttributeTestClassAttribute işaretlenmiş her yöntemi yürütü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 sınıfın üyelerini Assert ç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. Sınıfın Assert en sık adlandı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şvuruda bulunursa onay başarısız olur.
Assert.IsFalse Bir koşulun olduğunu falsedoğrular. Koşul ise trueonay başarısız olur.
Assert.IsNotNull Bir nesnenin olmadığını nulldoğrular. nesnesi ise nullonay başarısız olur.

Oluşturması Assert.ThrowsException beklenen özel durum türünü belirtmek için bir test yönteminde yöntemini de kullanabilirsiniz. Belirtilen özel durum oluşturulmazsa test başarısız olur.

yöntemini test etmek StringLibrary.StartsWithUpper için büyük harf karakterle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini true beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsTrue . Benzer şekilde, büyük harf karakterden başka bir şeyle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini false beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsFalse .

Kitaplık yönteminiz dizeleri işlediğinden, boş bir dizeyi (String.Empty), karakterleri olmayan ve 0 olan geçerli bir dizeyi ve Length başlatılmamış bir null dizeyi başarıyla işlediğinden de emin olmak istersiniz. Doğrudan statik bir yöntem olarak çağırabilir StartsWithUpper ve tek String bir bağımsız değişken geçirebilirsiniz. Alternatif olarak, öğesine atanmış nullbir string değişkende uzantı yöntemi olarak da çağırabilirsinizStartsWithUpper.

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. UnitTest1.cs veya UnitTest1.vb kod penceresinde kodu aşağıdaki kodla değiştirin:

    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));
                }
            }
        }
    }
    
    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
    

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

  2. Menü çubuğunda Dosya>Kaydet UnitTest1.cs Farklı'yı veya Dosya>Kaydet UnitTest1.vb Farklı'yı seçin. Dosyayı Farklı Kaydet iletişim kutusunda Kaydet düğmesinin yanındaki oku seçin ve Kodlama ile Kaydet'i seçin.

    Visual Studio Save File As dialog

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

  4. Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı seçin.

    Visual Studio Advanced Save Options dialog

    Kaynak kodunuzu UTF8 ile kodlanmış bir dosya olarak kaydedemezseniz, Visual Studio bunu ASCII dosyası olarak kaydedebilir. 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 olmaz.

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

    Test Explorer window with passing tests

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. yöntemindeki words diziyi TestDoesNotStartWithUpper "Error" dizesini içerecek şekilde değiştirin. Visual Studio, testleri çalıştırmak için bir çözüm oluşturulduğunda açık dosyaları otomatik olarak kaydettiğinden dosyayı kaydetmeniz gerekmez.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
    Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " }
    
    
  2. 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 Explorer window with failing tests

  3. Başarısız olan testi TestDoesNotStartWithseçin.

    Test Gezgini penceresinde, onay tarafından oluşturulan ileti görüntülenir: "Assert.IsFalse başarısız oldu. 'Error' için bekleniyor: false; actual: True". Hata nedeniyle, "Hata" sonrasında dizideki hiçbir dize test edilmedi.

    Test Explorer window showing the IsFalse assertion failure

  4. 1. adımda eklediğiniz "Error" dizesini kaldırın. 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 Hata Ayıklama derlemesi çalıştırılırken geçtiğine göre, kitaplığın Release derlemesine karşı testleri ek bir süre çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Hata Ayıklama ve Yayın derlemeleri arasında farklı davranışlar üretebilir.

Yayın derlemesini test etmek için:

  1. Visual Studio araç çubuğunda Derleme yapılandırmasını Hata Ayıkla yerine Yayın olarak değiştirin.

    Visual Studio toolbar with release build highlighted

  2. Çözüm Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.

    StringLibrary context menu with build command

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

Testlerde hata ayıklama

IDE'niz olarak Visual Studio kullanıyorsanız, Öğretici: Birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio kullanarak bir .NET konsol uygulamasında hata ayıklama bölümünde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTests projesine sağ tıklayın ve bağlam menüsünden Testlerde Hata Ayıklama'yı 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.

Ek kaynaklar

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:

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

Önkoşullar

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'tir.

  1. Visual Studio’yu çalıştırın.

  2. ClassLibraryProjects Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.

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

    1. Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.

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

    3. MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 7 (Standart vadeli destek) öğesini seçin. Ardından Oluştur’u seçin.

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

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class UnitTest1
            <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.

Proje başvurusu ekleme

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

  1. Çözüm Gezgini'nde StringLibraryTest projesinin Bağımlılıklar düğümüne sağ tıklayın ve bağlam menüsünden Proje Başvurusu Ekle'yi seçin.

  2. Başvuru Yöneticisi iletişim kutusunda Projeler düğümünü genişletin ve StringLibrary'nin yanındaki kutuyu seçin. Derlemeye StringLibrary başvuru eklemek, derleyicinin StringLibraryTest projesini derlerken StringLibrary yöntemlerini bulmasına olanak tanır.

  3. Tamam'ı seçin.

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

Visual Studio bir birim testi çalıştırdığında, özniteliğiyle işaretlenmiş bir sınıfta özniteliğiyle TestMethodAttributeTestClassAttribute işaretlenmiş her yöntemi yürütü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 sınıfın üyelerini Assert ç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. Sınıfın Assert en sık adlandı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şvuruda bulunursa onay başarısız olur.
Assert.IsFalse Bir koşulun olduğunu falsedoğrular. Koşul ise trueonay başarısız olur.
Assert.IsNotNull Bir nesnenin olmadığını nulldoğrular. nesnesi ise nullonay başarısız olur.

Oluşturması Assert.ThrowsException beklenen özel durum türünü belirtmek için bir test yönteminde yöntemini de kullanabilirsiniz. Belirtilen özel durum oluşturulmazsa test başarısız olur.

yöntemini test etmek StringLibrary.StartsWithUpper için büyük harf karakterle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini true beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsTrue . Benzer şekilde, büyük harf karakterden başka bir şeyle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini false beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsFalse .

Kitaplık yönteminiz dizeleri işlediğinden, boş bir dizeyi (String.Empty), karakterleri olmayan ve 0 olan geçerli bir dizeyi ve Length başlatılmamış bir null dizeyi başarıyla işlediğinden de emin olmak istersiniz. Doğrudan statik bir yöntem olarak çağırabilir StartsWithUpper ve tek String bir bağımsız değişken geçirebilirsiniz. Alternatif olarak, öğesine atanmış nullbir string değişkende uzantı yöntemi olarak da çağırabilirsinizStartsWithUpper.

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. UnitTest1.cs veya UnitTest1.vb kod penceresinde 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));
                }
            }
        }
    }
    
    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
    

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

  2. Menü çubuğunda Dosya>Kaydet UnitTest1.cs Farklı'yı veya Dosya>Kaydet UnitTest1.vb Farklı'yı seçin. Dosyayı Farklı Kaydet iletişim kutusunda Kaydet düğmesinin yanındaki oku seçin ve Kodlama ile Kaydet'i seçin.

    Visual Studio Save File As dialog

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

  4. Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı seçin.

    Visual Studio Advanced Save Options dialog

    Kaynak kodunuzu UTF8 ile kodlanmış bir dosya olarak kaydedemezseniz, Visual Studio bunu ASCII dosyası olarak kaydedebilir. 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 olmaz.

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

    Test Explorer window with passing tests

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. yöntemindeki words diziyi TestDoesNotStartWithUpper "Error" dizesini içerecek şekilde değiştirin. Visual Studio, testleri çalıştırmak için bir çözüm oluşturulduğunda açık dosyaları otomatik olarak kaydettiğinden dosyayı kaydetmeniz gerekmez.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
    Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " }
    
    
  2. 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 Explorer window with failing tests

  3. Başarısız olan testi TestDoesNotStartWithseçin.

    Test Gezgini penceresinde, onay tarafından oluşturulan ileti görüntülenir: "Assert.IsFalse başarısız oldu. 'Error' için bekleniyor: false; actual: True". Hata nedeniyle, "Hata" sonrasında dizideki hiçbir dize test edilmedi.

    Test Explorer window showing the IsFalse assertion failure

  4. 1. adımda eklediğiniz "Error" dizesini kaldırın. 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 Hata Ayıklama derlemesi çalıştırılırken geçtiğine göre, kitaplığın Release derlemesine karşı testleri ek bir süre çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Hata Ayıklama ve Yayın derlemeleri arasında farklı davranışlar üretebilir.

Yayın derlemesini test etmek için:

  1. Visual Studio araç çubuğunda Derleme yapılandırmasını Hata Ayıkla yerine Yayın olarak değiştirin.

    Visual Studio toolbar with release build highlighted

  2. Çözüm Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.

    StringLibrary context menu with build command

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

Testlerde hata ayıklama

IDE'niz olarak Visual Studio kullanıyorsanız, Öğretici: Birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio kullanarak bir .NET konsol uygulamasında hata ayıklama bölümünde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTests projesine sağ tıklayın ve bağlam menüsünden Testlerde Hata Ayıklama'yı 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.

Ek kaynaklar

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:

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

Önkoşullar

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'tir.

  1. Visual Studio’yu çalıştırın.

  2. ClassLibraryProjects Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.

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

    1. Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.

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

    3. MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 6 (Uzun vadeli destek) öğesini seçin. Ardından Oluştur’u seçin.

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

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class UnitTest1
            <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.

Proje başvurusu ekleme

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

  1. Çözüm Gezgini'nde StringLibraryTest projesinin Bağımlılıklar düğümüne sağ tıklayın ve bağlam menüsünden Proje Başvurusu Ekle'yi seçin.

  2. Başvuru Yöneticisi iletişim kutusunda Projeler düğümünü genişletin ve StringLibrary'nin yanındaki kutuyu seçin. Derlemeye StringLibrary başvuru eklemek, derleyicinin StringLibraryTest projesini derlerken StringLibrary yöntemlerini bulmasına olanak tanır.

  3. Tamam'ı seçin.

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

Visual Studio bir birim testi çalıştırdığında, özniteliğiyle işaretlenmiş bir sınıfta özniteliğiyle TestMethodAttributeTestClassAttribute işaretlenmiş her yöntemi yürütü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 sınıfın üyelerini Assert ç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. Sınıfın Assert en sık adlandı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şvuruda bulunursa onay başarısız olur.
Assert.IsFalse Bir koşulun olduğunu falsedoğrular. Koşul ise trueonay başarısız olur.
Assert.IsNotNull Bir nesnenin olmadığını nulldoğrular. nesnesi ise nullonay başarısız olur.

Oluşturması Assert.ThrowsException beklenen özel durum türünü belirtmek için bir test yönteminde yöntemini de kullanabilirsiniz. Belirtilen özel durum oluşturulmazsa test başarısız olur.

yöntemini test etmek StringLibrary.StartsWithUpper için büyük harf karakterle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini true beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsTrue . Benzer şekilde, büyük harf karakterden başka bir şeyle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini false beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsFalse .

Kitaplık yönteminiz dizeleri işlediğinden, boş bir dizeyi (String.Empty), karakterleri olmayan ve 0 olan geçerli bir dizeyi ve Length başlatılmamış bir null dizeyi başarıyla işlediğinden de emin olmak istersiniz. Doğrudan statik bir yöntem olarak çağırabilir StartsWithUpper ve tek String bir bağımsız değişken geçirebilirsiniz. Alternatif olarak, öğesine atanmış nullbir string değişkende uzantı yöntemi olarak da çağırabilirsinizStartsWithUpper.

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. UnitTest1.cs veya UnitTest1.vb kod penceresinde 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));
                }
            }
        }
    }
    
    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
    

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

  2. Menü çubuğunda Dosya>Kaydet UnitTest1.cs Farklı'yı veya Dosya>Kaydet UnitTest1.vb Farklı'yı seçin. Dosyayı Farklı Kaydet iletişim kutusunda Kaydet düğmesinin yanındaki oku seçin ve Kodlama ile Kaydet'i seçin.

    Visual Studio Save File As dialog

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

  4. Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı seçin.

    Visual Studio Advanced Save Options dialog

    Kaynak kodunuzu UTF8 ile kodlanmış bir dosya olarak kaydedemezseniz, Visual Studio bunu ASCII dosyası olarak kaydedebilir. 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 olmaz.

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

    Test Explorer window with passing tests

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. yöntemindeki words diziyi TestDoesNotStartWithUpper "Error" dizesini içerecek şekilde değiştirin. Visual Studio, testleri çalıştırmak için bir çözüm oluşturulduğunda açık dosyaları otomatik olarak kaydettiğinden dosyayı kaydetmeniz gerekmez.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
    Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " }
    
    
  2. 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 Explorer window with failing tests

  3. Başarısız olan testi TestDoesNotStartWithseçin.

    Test Gezgini penceresinde, onay tarafından oluşturulan ileti görüntülenir: "Assert.IsFalse başarısız oldu. 'Error' için bekleniyor: false; actual: True". Hata nedeniyle, "Hata" sonrasında dizideki hiçbir dize test edilmedi.

    Test Explorer window showing the IsFalse assertion failure

  4. 1. adımda eklediğiniz "Error" dizesini kaldırın. 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 Hata Ayıklama derlemesi çalıştırılırken geçtiğine göre, kitaplığın Release derlemesine karşı testleri ek bir süre çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Hata Ayıklama ve Yayın derlemeleri arasında farklı davranışlar üretebilir.

Yayın derlemesini test etmek için:

  1. Visual Studio araç çubuğunda Derleme yapılandırmasını Hata Ayıkla yerine Yayın olarak değiştirin.

    Visual Studio toolbar with release build highlighted

  2. Çözüm Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.

    StringLibrary context menu with build command

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

Testlerde hata ayıklama

IDE'niz olarak Visual Studio kullanıyorsanız, Öğretici: Birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio kullanarak bir .NET konsol uygulamasında hata ayıklama bölümünde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTests projesine sağ tıklayın ve bağlam menüsünden Testlerde Hata Ayıklama'yı 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.

Ek kaynaklar

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: