Visual Studio kullanarak .NET sınıf kitaplığını test edin
Önemli
Microsoft, Mac için Visual Studio kullanımdan kaldırıldığını duyurdu. Mac için Visual Studio artık 31 Ağustos 2024'den itibaren desteklenmeyecektir. Alternatifler şunlardır:
- C# Dev Kit ile Visual Studio Code ve .NET MAUI ve Unity gibi ilgili uzantılar.
- Mac'teki bir VM'de Windows üzerinde çalışan Visual Studio.
- Bulutta bir VM'de Windows üzerinde çalışan Visual Studio.
Daha fazla bilgi için bkz. Mac için Visual Studio kullanımdan kaldırma duyurusu.
Bu öğreticide, bir çözüme test projesi ekleyerek birim testlerini otomatikleştirme adımları gösterilmektedir.
Ön koşullar
- Bu öğretici, Mac için Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde 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'tir.
Mac için Visual Studio'ı başlatın.
ClassLibraryProjects
oluşturduğunuz çözümü Mac için Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde açın.Çözüm panelinde ctrl tuşunu basılı tutarak çözüme
ClassLibraryProjects
tıklayın ve Yeni Proje Ekle'yi>seçin.Yeni Proje iletişim kutusunda Web ve Konsol düğümünden Testler'iseçin. MSTest Projesini ve ardından İleri'yi seçin.
Hedef Çerçeve olarak .NET 5.0'ı ve ardından İleri'yi seçin.
Yeni projeye "StringLibraryTest" adını verin ve Oluştur'u seçin.
Visual Studio aşağıdaki kodla bir sınıf dosyası oluşturur:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
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 .
- özniteliğini TestClassAttribute sınıfına
UnitTest1
uygular. - özniteliğini TestMethodAttribute uygular
TestMethod1
.
[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 projeye bir başvuru StringLibrary
ekleyin.
Çözüm panelinde StringLibraryTest altındaki Bağımlılıklar'a ctrl tuşunu basılı tutarak tıklayın. Bağlam menüsünden Başvuru Ekle'yi seçin.
Başvurular iletişim kutusunda StringLibrary projesini seçin. 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 | Function |
---|---|
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 false doğrular. Koşul ise true onay başarısız olur. |
Assert.IsNotNull |
Bir nesnenin olmadığını null doğrular. nesnesi ise null onay 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ış null
bir 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:
UnitTest1.cs dosyasını açın ve 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)); } } } }
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 testindeTestDoesNotStartWithUpper
Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.Menü çubuğunda Dosya>Farklı Kaydet'i seçin. İletişim kutusunda Kodlama'nın Unicode (UTF-8) olarak ayarlandığından emin olun.
Mevcut dosyayı değiştirmek isteyip istemediğiniz sorulduğunda Değiştir'i seçin.
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.
Ekranın sağ tarafındaki Birim Testleri panelini açın. Menüden Testleri Görüntüle'yi>seçin.
Paneli açık tutmak için Dock simgesine tıklayın.
Tümünü Çalıştır düğmesine tıklayın.
Tüm testler geçer.
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.
yöntemindeki
words
diziyiTestDoesNotStartWithUpper
"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", ".", ";", " " };
Testleri yeniden çalıştırın.
Bu kez, Test Gezgini penceresi iki testin başarılı ve birinin başarısız olduğunu gösterir.
ctrl tuşunu basılı tutarak başarısız olan teste
TestDoesNotStartWithUpper
tıklayın ve bağlam menüsünden Sonuç Tuş Takımını Göster'i seçin.Sonuçlar bölmesi, onay tarafından oluşturulan iletiyi görüntüler: "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.
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:
Visual Studio araç çubuğunda Derleme yapılandırmasını Hata Ayıkla yerine Yayın olarak değiştirin.
Çözüm panelinde StringLibrary projesine ctrl tuşunu basılı tutarak tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.
Birim testlerini yeniden çalıştırın.
Testler geçer.
Testlerde hata ayıklama
IDE'niz olarak Mac için Visual Studio kullanıyorsanız, Öğretici: Birim testi projenizi kullanarak kodda hata ayıklamak için Mac 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 StringLibraryTestsprojesine ctrl tuşunu basılı tutarak tıklayın ve bağlam menüsünden Projede Hata Ayıklamayı Başlat'ı 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:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin