Aracılığıyla paylaş


Live Unit Testing kullanmaya başlama

Visual Studio çözümünde Canlı Birim Testi'ni etkinleştirdiğinizde, test kapsamınızı ve testlerinizin durumunu görsel olarak gösterir. Live Unit Testing ayrıca kodunuzu her değiştirdiğinizde testleri dinamik olarak yürütür ve değişiklikleriniz testlerin başarısız olmasına neden olduğunda size hemen bildirir.

Canlı Birim Testi, .NET Framework, .NET Core veya .NET 5+ hedefli çözümleri test etmek için kullanılabilir. Bu öğreticide, .NET'i hedefleyen basit bir sınıf kitaplığı oluşturarak Live Unit Testing kullanmayı öğrenecek ve test etmek için .NET'i hedefleyen bir MSTest projesi oluşturacaksınız.

C# çözümünün tamamı GitHub'da MicrosoftDocs/visualstudio-docs deposundan indirilebilir.

Önkoşullar

Bu eğitim, Visual Studio Enterprise sürümünü .NET masaüstü geliştirme iş yüküyle yüklemiş olmanız gerekmektedir.

Çözümü ve sınıf kitaplığı projesini oluşturma

Tek bir .NET sınıf kitaplığı projesi olan StringLibrary'den oluşan UtilityLibraries adlı bir Visual Studio çözümü oluşturarak başlayın.

Çözüm yalnızca bir veya daha fazla proje için bir kapsayıcıdır. Boş bir çözüm oluşturmak için Visual Studio'yu açın ve aşağıdakileri yapın:

  1. Üst düzey Visual Studio menüsünden Dosya>Yeni>Proje'yi seçin.

  2. Şablon arama kutusuna çözüm yazın ve ardından Boş Çözüm şablonunu seçin. Projeye UtilityLibraries adını verin.

  3. Çözümü oluşturmayı tamamlayın.

Çözümü oluşturduğunuza göre, dizelerle çalışmak için bir dizi uzantı yöntemi içeren StringLibrary adlı bir sınıf kitaplığı oluşturacaksınız.

  1. Çözüm Gezgini'nde UtilityLibraries çözümüne sağ tıklayın veYeni Proje Ekle'yi> seçin.

  2. Şablon arama kutusuna sınıf kitaplığı yazın ve .NET veya .NET Standard'ı hedefleyen Sınıf Kitaplığı şablonunu seçin. Nextöğesine tıklayın.

  3. Projeye StringLibrary adını verin.

  4. Projeyi oluşturmak için Oluştur'a tıklayın.

  5. Kod düzenleyicisindeki mevcut kodun tümünü aşağıdaki kodla değiştirin:

    using System;
    
    namespace UtilityLibraries
    {
        public static class StringLibrary
        {
            public static bool StartsWithUpper(this string s)
            {
                if (String.IsNullOrWhiteSpace(s))
                    return false;
    
                return Char.IsUpper(s[0]);
            }
    
            public static bool StartsWithLower(this string s)
            {
                if (String.IsNullOrWhiteSpace(s))
                    return false;
    
                return Char.IsLower(s[0]);
            }
    
            public static bool HasEmbeddedSpaces(this string s)
            {
                foreach (var ch in s.Trim())
                {
                    if (ch == ' ')
                        return true;
                }
                return false;
            }
        }
    }
    

    StringLibrary'nin üç statik yöntemi vardır:

    • StartsWithUpper dize büyük harf karakterle başlıyorsa döndürür true ; aksi takdirde döndürür false.

    • StartsWithLower dize küçük harfle başlıyorsa döndürür true ; aksi takdirde döndürür false.

    • HasEmbeddedSpaces bir dize eklenmiş bir boşluk karakteri içeriyorsa döndürür true ; aksi takdirde döndürür false.

  6. Üst düzey Visual Studio menüsünden Oluştur>Çözümü Derle öğesini seçin. Derleme başarılı bir şekilde tamamlanmalıdır.

Test projesini oluşturma

Sonraki adım, StringLibrary kitaplığını test etmek için birim testi projesi oluşturmaktır. Aşağıdaki adımları gerçekleştirerek birim testlerini oluşturun:

  1. Çözüm Gezgini'nde UtilityLibraries çözümüne sağ tıklayın veYeni Proje Ekle'yi> seçin.

  2. Şablon arama kutusuna birim testi yazın, dil olarak C# seçeneğini belirleyin ve ardından .NET için MSTest Birim Test Projesi şablonunu seçin. Nextöğesine tıklayın.

    Uyarı

    Visual Studio 2019 sürüm 16.9'da, MSTest proje şablonu adı Birim Testi Projesi'dir.

  3. Projeye StringLibraryTests adını verin ve İleri'ye tıklayın.

  4. Önerilen hedef çerçeveyi veya .NET 10'u ve ardından Oluştur'u seçin.

    Uyarı

    Bu başlangıç öğreticisinde MSTest test çerçevesiyle Live Unit Testing kullanılır. xUnit ve NUnit test çerçevelerini de kullanabilirsiniz.

  5. Birim testi projesi, testte olduğu sınıf kitaplığına otomatik olarak erişemiyor. Sınıf kitaplığı projesine referans ekleyerek test kitaplığına erişim sağlarsınız. Bunu yapmak için projeye sağ tıklayın StringLibraryTests veProje Başvurusu> seçin. Başvuru Yöneticisi iletişim kutusunda Çözüm sekmesinin seçili olduğundan emin olun ve aşağıdaki çizimde gösterildiği gibi StringLibrary projesini seçin.

    Başvuru Yöneticisi iletişim kutusu

  6. Şablon tarafından sağlanan standart birim test kodunu aşağıdaki kodla değiştirin.

    using System;
    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,
                                  $"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 ? "<null>" : word)}': " +
                                   $"false; Actual: {result}");
                }
            }
        }
    }
    
  7. Araç çubuğundaki Kaydet simgesini seçerek projenizi kaydedin.

    Birim testi kodu bazı ASCII olmayan karakterler içerdiğinden, dosyayı varsayılan ASCII biçiminde kaydederseniz bazı karakterlerin kaybolacağı konusunda uyarmak için aşağıdaki iletişim kutusunu görürsünüz.

  8. Diğer Kodlama ile Kaydet düğmesini seçin.

    Dosya kodlaması seçme

  9. Kaydetme Seçeneklerini İlerlet iletişim kutusunun Kodlama açılan listesinde, aşağıdaki çizimde gösterildiği gibi Unicode (imzasız UTF-8) - Codepage 65001'i seçin:

    UTF-8 kodlamasını seçme

  10. En üst düzey Visual Studio menüsünden Derleme> Çözümü'ne tıklayarak birim testi projesini derleyin.

Sınıf kitaplığı ve bunun için bazı birim testleri oluşturdunuz. Canlı Birim Testi'ni kullanmak için gereken ön hazırlıkları tamamladınız.

Canlı Birim Testlerini Etkinleştirme

Şu ana kadar StringLibrary sınıf kitaplığı için testleri yazdınız ancak henüz yürütmediniz. Canlı Birim Testi, etkinleştirdikten sonra bunları otomatik olarak yürütür. Bunu yapmak için aşağıdakileri yapın:

  1. İsteğe bağlı olarak StringLibrary kodunu içeren kod düzenleyicisi penceresini seçin. Bu, C# projesi için Class1.cs veya Visual Basic projesi için Class1.vb . (Bu adım, Canlı Birim Testi'ni etkinleştirdikten sonra testlerinizin sonucunu ve kod kapsamınızın kapsamını görsel olarak incelemenizi sağlar.)

  2. Test>Canlı Birim Testi>Başlat seçeneğini üst düzey Visual Studio menüsünden seçin.

  3. Depo Kök Dizini'nin hem yardımcı program projesi hem de test projesi için kaynak dosyaların yolunu içerdiğinden emin olarak Canlı Birim Testi yapılandırmasını doğrulayın. İleri'yi ve ardından Son'u seçin.

  1. Canlı Birim Testi penceresinde Tüm testleri dahil et bağlantısını seçin (Alternatif olarak, Çalma Listesi düğmesi simgesini ve ardından altındaki tüm testleri seçen StringLibraryTest'i seçin. Ardından düzenleme modundan çıkmak için Çalma Listesi düğmesinin seçimini kaldırın.)

  2. Visual Studio projeyi yeniden oluşturur ve tüm testlerinizi otomatik olarak çalıştıran Canlı Birim Testi'ni başlatır.

Testlerinizi çalıştırmayı bitirdiğinde , Live Unit Testing hem genel sonuçları hem de tek tek testlerin sonuçlarını görüntüler. Buna ek olarak, kod düzenleyicisi penceresi hem test kodu kapsamınızı hem de testlerinizin sonucunu grafik olarak görüntüler. Aşağıdaki çizimde gösterildiği gibi, üç test de başarıyla yürütüldü. Ayrıca testlerimizin yöntemdeki tüm kod yollarını kapsadığını ve bu testlerin tümünün StartsWithUpper başarıyla yürütüldüğünü (yeşil onay işaretiyle gösterilir, "✓") gösterir. Son olarak, StringLibrary'deki diğer yöntemlerin hiçbirinin kod kapsamına sahip olmadığını gösterir (mavi çizgiyle gösterilir, "➖").

Live Unit testini başlattıktan sonra Canlı Test Gezgini ve kod düzenleyicisi penceresi

Ayrıca kod düzenleyicisi penceresinde belirli bir kod kapsamı simgesini seçerek test kapsamı ve test sonuçları hakkında daha ayrıntılı bilgi edinebilirsiniz. Bu ayrıntıyı incelemek için aşağıdakileri yapın:

  1. Yöntem if (String.IsNullOrWhiteSpace(s)) içinde StartsWithUpper satırındaki yeşil onay işaretine tıklayın. Aşağıdaki çizimde gösterildiği gibi, Canlı Birim Testi üç testin bu kod satırını kapsadığını ve tümünün başarıyla yürütüldüğünü gösterir.

    if koşullu deyimi için kod kapsamı

  2. Yöntem return Char.IsUpper(s[0]) içinde StartsWithUpper satırındaki yeşil onay işaretine tıklayın. Aşağıdaki çizimde gösterildiği gibi, Live Unit Testing yalnızca iki testin bu kod satırını kapsadığını ve tümünün başarıyla yürütüldüğünü gösterir.

    İade deyimi için kod kapsamı

Live Unit Testing'in belirlemiş olduğu en önemli sorun eksik kod kapsamıdır. Sonraki bölümde ele alacağız.

Test kapsamını genişletme

Bu bölümde birim testlerinizi yöntemine StartsWithLower genişleteceksiniz. Bunu yaparken, Live Unit Testing kodunuzu dinamik olarak test etmeye devam eder.

Kod kapsamını yöntemine StartsWithLower genişletmek için aşağıdakileri yapın:

  1. Projenizin test kaynak kodu dosyasına aşağıdaki TestStartsWithLower ve TestDoesNotStartWithLower yöntemlerini ekleyin:

    // Code to add to UnitTest1.cs
    [TestMethod]
    public void TestStartsWithLower()
    {
        // Tests that we expect to return true.
        string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство" };
        foreach (var word in words)
        {
            bool result = word.StartsWithLower();
            Assert.IsTrue(result,
                          $"Expected for '{word}': true; Actual: {result}");
        }
    }
    
    [TestMethod]
    public void TestDoesNotStartWithLower()
    {
        // Tests that we expect to return false.
        string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва",
                           "1234", ".", ";", " "};
        foreach (var word in words)
        {
            bool result = word.StartsWithLower();
            Assert.IsFalse(result,
                           $"Expected for '{word}': false; Actual: {result}");
        }
    }
    
  2. DirectCallWithNullOrEmpty yöntemine, Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse yöntemine yapılan çağrıdan hemen sonra aşağıdaki kodu ekleyerek değişiklik yapın.

    // Code to add to UnitTest1.cs
    result = StringLibrary.StartsWithLower(word);
    Assert.IsFalse(result,
                   $"Expected for '{(word == null ? "<null>" : word)}': " +
                   $"false; Actual: {result}");
    
  3. Canlı Birim Testi, kaynak kodunuzu değiştirdiğinizde yeni ve değiştirilmiş testleri otomatik olarak yürütür. Aşağıdaki çizimde gösterildiği gibi, eklediğiniz ikisi ve değiştirdiğiniz test de dahil olmak üzere tüm testler başarılı olmuştur.

    Test kapsamını genişletdikten sonra Canlı Test Gezgini

  4. StringLibrary sınıfının kaynak kodunu içeren pencereye geçin. Live Unit Testing artık kod kapsamımızın StartsWithLower yöntemini kapsadığını gösteriyor.

    StartsWithLower yöntemi için kod kapsamı

Bazı durumlarda , Test Gezgini'ndeki başarılı testler gri gösterilebilir. Bu, testin şu anda yürütülmekte olduğunu veya testin son yürütüldükten sonra testi etkileyecek kod değişikliği olmadığından yeniden çalışmadığını gösterir.

Şimdiye kadar tüm testlerimiz başarılı oldu. Sonraki bölümde test hatasını nasıl işleyebileceğinizi inceleyeceğiz.

Test hatasını işleme

Bu bölümde, test hatalarını belirlemek, gidermek ve gidermek için Canlı Birim Testi'ni nasıl kullanabileceğinizi keşfedeceksiniz. Bunu, test kapsamını HasEmbeddedSpaces yöntemine genişleterek yapacaksınız.

  1. Test dosyanıza aşağıdaki yöntemi ekleyin:

    [TestMethod]
    public void TestHasEmbeddedSpaces()
    {
        // Tests that we expect to return true.
        string[] phrases = { "one car", "Name\u0009Description",
                             "Line1\nLine2", "Line3\u000ALine4",
                             "Line5\u000BLine6", "Line7\u000CLine8",
                             "Line0009\u000DLine10", "word1\u00A0word2" };
        foreach (var phrase in phrases)
        {
            bool result = phrase.HasEmbeddedSpaces();
            Assert.IsTrue(result,
                          $"Expected for '{phrase}': true; Actual: {result}");
        }
    }
    
  2. Çalıştırıldığında, Live Unit Testing, aşağıdaki çizimde gösterildiği gibi TestHasEmbeddedSpaces yönteminin başarısız olduğunu belirtir.

    Başarısız bir testi bildiren Canlı Test Gezgini

  3. Kitaplık kodunu görüntüleyen pencereyi seçin. Live Unit Testing, kod kapsamını HasEmbeddedSpaces yöntemine genişletti. Ayrıca, başarısız testlerin kapsadığı satırlara kırmızı bir "🞩" ekleyerek test hatasını bildirir.

  4. HasEmbeddedSpaces Yöntem imzasını içeren satırın üzerine gelerek imleci yerleştirin. Canlı Birim Testi, aşağıdaki çizimde gösterildiği gibi yöntemin bir test kapsamında olduğunu bildiren bir araç ipucu görüntüler:

    Başarısız bir testle ilgili Canlı Birim Testi bilgileri

  5. Başarısız TestHasEmbeddedSpaces testini seçin. Canlı Birim Testi, aşağıdaki çizimde gösterildiği gibi tüm testleri çalıştırma ve tüm testlerde hata ayıklama gibi birkaç seçenek sunar:

    Başarısız bir test için Canlı Birim Testi seçenekleri

  6. Başarısız testte hata ayıklamak için Tümünü Hatalarını Ayıkla'ya tıklayın.

  7. Visual Studio testi hata ayıklama modunda yürütür.

    Test, dizideki her dizeyi phrase adlı değişkene atar ve HasEmbeddedSpaces yöntemine geçirir. Program yürütme, assert ifadesi ilk kez olduğunda falsehata ayıklayıcısını duraklatır ve çağırır. Yöntem çağrısındaki Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue beklenmeyen değerden kaynaklanan özel durum iletişim kutusu aşağıdaki çizimde gösterilmiştir.

    Canlı Birim Testi özel durum iletişim kutusu

    Ayrıca, aşağıdaki çizimde gösterildiği gibi, Visual Studio'nun sağladığı tüm hata ayıklama araçları başarısız testimizin sorunlarını gidermemize yardımcı olmak için kullanılabilir:

    Visual Studio hata ayıklama araçları

    Otomatikler penceresinde değişkenin değerinin phrase dizinin ikinci öğesi olan "Name\tDescription" olduğuna dikkat edin. Test yöntemi, bu dize geçirildiğinde HasEmbeddedSpaces döndürmesini true bekler; ancak bunun yerine false döndürür. Açıkçası, sekme karakteri olan "\t" öğesini eklenmiş bir boşluk olarak tanımaz.

  8. Devam Et'i> seçin, F5 tuşuna basın veya test programını yürütmeye devam etmek için araç çubuğundaki Devam et düğmesine tıklayın. İşlenmeyen bir özel durum oluştuğundan test sonlandırılır. Bu, hatanın ön araştırması için yeterli bilgi sağlar. ( TestHasEmbeddedSpaces Test yordamı) yanlış bir varsayımda bulundu veya HasEmbeddedSpaces tüm katıştırılmış alanları doğru tanımıyor.

  9. Sorunu tanılamak ve düzeltmek için StringLibrary.HasEmbeddedSpaces yöntemine başlayın. HasEmbeddedSpaces yöntemindeki karşılaştırmaya bak. Ekli bir alanı U+0020 olarak kabul eder. Ancak, Unicode Standart başka bir dizi boşluk karakteri içerir. Bu, kütüphane kodunun bir boşluk karakteri için yanlış test ettiğini gösterir.

  10. Eşitlik karşılaştırmasını yöntemine System.Char.IsWhiteSpace yapılan bir çağrıyla değiştirin:

    if (Char.IsWhiteSpace(ch))
    
  11. Live Unit Testing, başarısız test yöntemini otomatik olarak yeniden çalıştırır.

    Canlı Birim Testi, güncellenmiş sonuçların kod düzenleyicisi penceresinde de görünmesini sağlar.