Öğ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
- Bu öğretici, 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.
Visual Studio’yu çalıştırın.
ClassLibraryProjects
Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.
Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.
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.
MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 8 (Önizleme) öğesini seçin. Ardından Oluştur’u seçin.
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ımlamakTestMethod1
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.
- 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
Proje başvurusu ekleme
Test projesinin sınıfıyla StringLibrary
çalışması için StringLibraryTest projesine StringLibrary
projeye bir başvuru ekleyin.
Çö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.
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.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 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 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 testindeTestDoesNotStartWithUpper
Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.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.
Farklı Kaydet'i Onayla iletişim kutusunda Evet düğmesini seçerek dosyayı kaydedin.
Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı 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.
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 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", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
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.
Başarısız olan testi
TestDoesNotStartWith
seç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.
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 Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.
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
- Bu öğretici, 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.
Visual Studio’yu çalıştırın.
ClassLibraryProjects
Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.
Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.
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.
MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 7 (Standart vadeli destek) öğesini seçin. Ardından Oluştur’u seçin.
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:
- 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. - C# veya
TestSub
Visual Basic'te tanımlamakTestMethod1
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.
Çö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.
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.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 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 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 testindeTestDoesNotStartWithUpper
Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.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.
Farklı Kaydet'i Onayla iletişim kutusunda Evet düğmesini seçerek dosyayı kaydedin.
Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı 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.
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 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", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
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.
Başarısız olan testi
TestDoesNotStartWith
seç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.
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 Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.
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
- Bu öğretici, 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.
Visual Studio’yu çalıştırın.
ClassLibraryProjects
Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.
Çözüm Gezgini'nde çözüme sağ tıklayın ve Yeni proje ekle'yi> seçin.
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.
MSTest Test Projesi şablonunu ve ardından İleri'yi seç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, Çerçeve kutusunda .NET 6 (Uzun vadeli destek) öğesini seçin. Ardından Oluştur’u seçin.
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:
- 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. - C# veya
TestSub
Visual Basic'te tanımlamakTestMethod1
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.
Çö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.
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.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 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 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 testindeTestDoesNotStartWithUpper
Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.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.
Farklı Kaydet'i Onayla iletişim kutusunda Evet düğmesini seçerek dosyayı kaydedin.
Gelişmiş Kaydetme Seçenekleri iletişim kutusunda Kodlamaaçılan listesinden Unicode (imzalı UTF-8) - Codepage 65001'i seçin ve Tamam'ı 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.
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 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", ".", ";", " " };
Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
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.
Başarısız olan testi
TestDoesNotStartWith
seç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.
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 Gezgini'nde StringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.
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: