Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Visual Studio'ı başlatın.
ClassLibraryProjectsçözümünü .NET sınıf kitaplığı oluşturma'da açın.Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.
Çözüm Gezgini'da çözüme sağ tıklayın ve Add>Yeni proje öğesini seçin.
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.
MSTest Test Projesi şablonunu seçin ve ardından Sonraki'yiseçin.
Yeni projenizi yapılandırın sayfasında, Proje adı kutusuna 'StringLibraryTest' yazın. Ardından İleri'yi seçin.
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
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 NamespaceBirim testi şablonu tarafından oluşturulan kaynak kodu aşağıdakileri yapar:
- C# içindeki StringLibraryTest proje dosyasına Microsoft.VisualStudio.TestTools.UnitTesting ekler ve Visual Basic'da Microsoft.VisualStudio.TestTools.UnitTesting içeri aktarır.
- özniteliğini sınıfına uygular.
- C# dilinde TestMethodAttribute veya Visual Basic'da
TestMethod1tanımlamak içinTestSubözniteliğini uygular.
[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.
Visual Studio Code'ı başlatın.
çözümünü açın> .NET sınıf kitaplığı oluşturun. Çözüm Gezgini'da Yeni Proje'i seçin veya Komut Paleti'nden .NET: Yeni Proje'yi seçin.
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:
- özniteliğini sınıfına uygular.
- özniteliğini tanımlamak için uygular.
- Birim testi için kullanılan türleri içeren ad alanını içeri aktarır . Ad alanı, GlobalUsings.cs dosyasındaki bir yönerge aracılığıyla import edilir.
[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.
Terminali açın ve StringLibrary ve ShowCase projelerini içeren öğreticiler klasörüne gidin.
Yeni bir MSTest test projesi oluşturun:
dotnet new mstest -n StringLibraryTestProje ş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:
- özniteliğini sınıfına uygular.
- Bu özniteliği tanımlamak için uygular.
- Birim testi için kullanılan türleri içeren ad alanını içeri aktarır .
[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
Test projesinin sınıfıyla çalışabilmesi için ilgili projeye diğer proje için bir bağlantı ekleyin.
Çözüm Gezgini'da StringLibraryTest projesinin Dependencies düğümüne sağ tıklayın ve bağlam menüsünden Add Project Reference öğesini seçin.
Başvuru Yöneticisi iletişim kutusunda StringLibrary'nin yanındaki kutuyu seçin.
StringLibraryTest için proje başvurusu olarak StringLibrary ekleyin.
Tamam'ı seçin.
Çözüm Gezgini 'StringLibraryTest' Projesine sağ tıklayın ve Proje Başvurusu Ekle 'ı seçin."StringLibrary" öğesini seçin.
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, özniteliğiyle işaretlenmiş bir sınıfta ö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 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. 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 olarak doğrulandığını teyit eder. "Koşul olduğunda assert başarısız olur." |
Assert.IsNotNull |
Bir nesnenin olmadığını doğrular. Nesne ise doğrulama başarısız olur. |
Test yönteminde beklenen özel durum türünü belirtmek için ayrıca yöntemi de kullanabilirsiniz. Belirtilen istisna oluşturulmazsa test başarısız olur.
Bir yöntemi test etmek için büyük harfle başlayan birkaç dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürmesini beklersiniz, böylece 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 döndürmesini beklersiniz, böylece yöntemini çağırabilirsiniz.
Kitaplık yönteminiz dizeler üzerinde işlem yaptığından, hem boş bir dizeyi hem de herhangi bir dizeyi başarıyla işlediğinden emin olmak istersiniz. Boş dize, karakter içermeyen ve 0 olan dizedir. Dize , başlatılmamış bir dizedir. Doğrudan statik bir yöntem olarak çağırabilir ve tek bir bağımsız değişken geçirebilirsiniz. Alternatif olarak, öğesine atanmış bir değişkende uzantı yöntemi olarak da çağırabilirsiniz.
Her biri bir dize dizisindeki her öğe için bir 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:
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 Namespaceyö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. yöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.
Menü çubuğunda DosyaTest1.cs Olarak Kaydet veya DosyaTest1.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.
Farklı Kaydet'i Onayla iletişim kutusunda, dosyayı kaydetmek için Evet düğmesini seçin.
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.
Menü çubuğunda TestTüm Testleri Çalıştıröğesini seçin. Test Gezgini penceresi açılmazsa, TestTest 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
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}"); } } } }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. yöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.
Değişikliklerinizi kaydedin.
Testlerinizi oluşturma ve çalıştırma
Çözüm Gezgini'da çözüme sağ tıklayın ve Build veya Komut Paleti'nden .NET: Build öğesini seçin.
Test penceresini seçin, Testleri Çalıştır'ı seçin veya Komut Paleti'nden Test: Tüm Testleri Çalıştır'ı seçin.
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}"); } } } }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. yöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.
Değişikliklerinizi kaydedin ve testleri çalıştırın:
dotnet testTestler 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.
yöntemindeki 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", ".", ";", " " }
Menü çubuğundan TestTü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,
Başarısız testi seçin .
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
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.
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: yanlış; gerçek: doğru". Hata nedeniyle, "Error" sonrasındaki dizide hiçbir dize test edilmedi.
Eklediğiniz "Error" dizesini kaldırın.
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:
Visual Studio araç çubuğunda derleme yapılandırmasını Debug yerine Release olarak değiştirin.
Çözüm Gezgini'da StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Build seçin.
Menü çubuğundan TestTü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.
Release 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.
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, CtrlShiftP 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
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:
dotnet CLI kullanarak paket oluşturma ve yayımlama
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:
dotnet CLI kullanarak paket yükleme ve kullanma
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: