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 öğretici, .NET masaüstü geliştirme iş yüküyle Visual Studio Enterprise sürümünü yüklemiş olmanız gerekir.
Çö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:
Üst düzey Visual Studio menüsünden Dosya>Yeni>Proje'yi seçin.
Şablon arama kutusuna çözüm yazın ve ardından Boş Çözüm şablonunu seçin. Projeye UtilityLibraries adını verin.
Çö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.
Çözüm Gezgini'da UtilityLibraries çözümüne sağ tıklayın ve Yeni Proje Ekle'yi>seçin.
Şablon arama kutusuna sınıf kitaplığı yazın ve .NET veya .NET Standard'ı hedefleyen Sınıf Kitaplığı şablonunu seçin. İleri'ye tıklayın.
Projeye StringLibrary adını verin.
Projeyi oluşturmak için Oluştur'a tıklayın.
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ürtrue
; aksi takdirde döndürürfalse
.StartsWithLower
dize küçük harfle başlıyorsa döndürürtrue
; aksi takdirde döndürürfalse
.HasEmbeddedSpaces
bir dize eklenmiş bir boşluk karakteri içeriyorsa döndürürtrue
; aksi takdirde döndürürfalse
.
Üst düzey Visual Studio menüsünden Derleme Çözümü Oluştur'a>tıklayın. Derleme başarılı olmalı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:
Çözüm Gezgini'da UtilityLibraries çözümüne sağ tıklayın ve Yeni Proje Ekle'yi>seçin.
Ş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. İleri'ye tıklayın.
Not
Visual Studio 2019 sürüm 16.9'da, MSTest proje şablonu adı Birim Testi Projesi'dir.
Projeye StringLibraryTests adını verin ve İleri'ye tıklayın.
Önerilen hedef çerçeveyi veya .NET 8'i ve ardından Oluştur'u seçin.
Not
Bu başlangıç öğreticisinde MSTest test çerçevesiyle Live Unit Testing kullanılır. xUnit ve NUnit test çerçevelerini de kullanabilirsiniz.
Birim testi projesi, testte olduğu sınıf kitaplığına otomatik olarak erişemiyor. Sınıf kitaplığı projesine başvuru ekleyerek test kitaplığına erişim verirsiniz. Bunu yapmak için projeye sağ tıklayın
StringLibraryTests
ve Proje Başvurusu Ekle'yi>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.Şablon tarafından sağlanan ortak 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}"); } } } }
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.
Diğer Kodlama ile Kaydet düğmesini seçin.
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:
En üst düzey Visual Studio menüsünden Derleme Yeniden 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:
İ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.)
Üst düzey Visual Studio menüsünden Test Canlı Birim Testi>Başlangıç'ı seçin.>
Depo Kökü'nde hem yardımcı program projesi hem de test projesi için kaynak dosyaların yolunun bulunduğundan emin olarak Canlı Birim Testi yapılandırmasını doğrulayın. İleri'yi ve ardından Son'u seçin.
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.)
Visual Studio projeyi yeniden oluşturur ve tüm testlerinizi otomatik olarak çalıştıran Canlı Birim Testi'ni başlatır.
- 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, "➖").
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:
Yönteminde okunan
if (String.IsNullOrWhiteSpace(s))
satırda yeşil onay işaretineStartsWithUpper
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.Yönteminde okunan
return Char.IsUpper(s[0])
satırda yeşil onay işaretineStartsWithUpper
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.
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:
Projenizin test kaynak kodu dosyasına aşağıdaki
TestStartsWithLower
veTestDoesNotStartWithLower
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}"); } }
yönteminin
DirectCallWithNullOrEmpty
çağrısındanMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse
hemen sonra aşağıdaki kodu ekleyerek yöntemini değiştirin.// Code to add to UnitTest1.cs result = StringLibrary.StartsWithLower(word); Assert.IsFalse(result, $"Expected for '{(word == null ? "<null>" : word)}': " + $"false; Actual: {result}");
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.
StringLibrary sınıfının kaynak kodunu içeren pencereye geçin. Live Unit Testing artık kod kapsamımızın yöntemine
StartsWithLower
genişletildiğini gösteriyor.
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ı yöntemine HasEmbeddedSpaces
genişleterek yapacaksınız.
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}"); } }
Test yürütürken, Live Unit Testing aşağıdaki çizimde gösterildiği gibi yöntemin
TestHasEmbeddedSpaces
başarısız olduğunu gösterir:Kitaplık kodunu görüntüleyen pencereyi seçin. Live Unit Testing, kod kapsamını yöntemine
HasEmbeddedSpaces
genişletti. Ayrıca, başarısız testlerin kapsadığı satırlara kırmızı bir "🞩" ekleyerek test hatasını bildirir.Yöntem imzasını içeren satırın
HasEmbeddedSpaces
üzerine gelin. 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 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 testte hata ayıklamak için Tümünü Hatalarını Ayıkla'ya tıklayın.
Visual Studio testi hata ayıklama modunda yürütür.
Test, bir dizideki her dizeyi adlı
phrase
bir değişkene atar ve yöntemineHasEmbeddedSpaces
geçirir. Program yürütme, assert ifadesi ilk kez olduğundafalse
hata ayıklayıcısını duraklatır ve çağırır. Yöntem çağrısındakiMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue
beklenmeyen değerden kaynaklanan özel durum iletişim kutusu aşağıdaki çizimde gösterilmiştir.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:
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 döndürülmesinitrue
beklerHasEmbeddedSpaces
; bunun yerine döndürürfalse
. Açıkçası, sekme karakteri olan "\t" öğesini eklenmiş bir boşluk olarak tanımaz.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 veyaHasEmbeddedSpaces
tüm katıştırılmış alanları doğru tanımıyor.Sorunu tanılamak ve düzeltmek için yöntemiyle
StringLibrary.HasEmbeddedSpaces
başlayın. yöntemindeki karşılaştırmayaHasEmbeddedSpaces
bakın. Ekli bir alanı U+0020 olarak kabul eder. Ancak, Unicode Standart başka bir dizi boşluk karakteri içerir. Bu, kitaplık kodunun bir boşluk karakteri için yanlış test ettiğini gösterir.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))
Live Unit Testing, başarısız test yöntemini otomatik olarak yeniden çalıştırır.
Canlı Birim Testi, kod düzenleyicisi penceresinde de görünen güncelleştirilmiş sonuçların göründüğünü gösterir.