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, Visual Studiokullanarak .NET sınıf kitaplığı oluşturma bölümündeki (
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'yu başlatın.
Visual Studiokullanarak .NET sınıf kitaplığı oluşturma
içinde oluşturduğunuz çözümünü 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>Ekleseç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 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 İleriseçin.
Ek Bilgiler sayfasında, Framework kutusunda .NET 8 seçin. Ardından Oluşturöğesini 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 NamespaceBirim testi şablonu tarafından oluşturulan kaynak kodu aşağıdakileri yapar:
-
Microsoft.VisualStudio.TestTools.UnitTesting Birim testi için kullanılan türleri içeren ad alanını içeri aktarır. C# dilinde ad alanı,
global usingiçindeki bir yönergesi aracılığıyla içeri aktarılır. -
TestClassAttribute özniteliğini
UnitTest1sınıfına uygular. -
TestMethodAttribute özniteliğini, C#'ta
TestMethod1veya Visual Basic'teTestSubtanımlamak için 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.
-
Microsoft.VisualStudio.TestTools.UnitTesting Birim testi için kullanılan türleri içeren ad alanını içeri aktarır. C# dilinde ad alanı,
Proje referansı ekleme
Test projesinin StringLibrary sınıfıyla çalışması için StringLibraryTest projesine StringLibrary projesine bir referans ekleyin.
Çözüm Gezgini 'nde,StringLibraryTest projesininBağımlılıklar düğümüne sağ tıklayın ve bağlam menüsünden Proje Başvurusu Ekleseçin. Başvuru Yöneticisi iletişim kutusunda, Projeler düğümünü genişletin ve StringLibraryyanındaki kutucuğu seçin. Derlemeye
StringLibrarybaşvuru eklemek, derleyicinin StringLibraryTest projesini derlerken StringLibrary yöntemlerini bulmasını sağlar.Tamamseçin.
Birim testi yöntemleri ekleme ve çalıştırma
Visual Studio bir birim testi çalıştırdığında, TestClassAttribute özniteliği ile işaretlenmiş bir sınıfta, TestMethodAttribute özniteliği ile 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 Assert 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.
Assert 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 | Fonksiyon |
|---|---|
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 falseolarak doğrulandığını teyit eder. "Koşul trueolduğunda assert başarısız olur." |
Assert.IsNotNull |
Bir nesnenin nullolmadığını doğrular. Nesne nullise doğrulama başarısız olur. |
Oluşturması beklenen özel durum türünü belirtmek için bir test yönteminde Assert.ThrowsException (veya MSTest 3.8 ve üzerini kullanıyorsanız Assert.Throws ve Assert.ThrowsExactly) yöntemini de kullanabilirsiniz. Belirtilen istisna oluşturulmazsa test başarısız olur.
Yöntemi test ederken, büyük harf karakterle başlayan birçok dize sağlamak istiyorsunuz. Bu durumlarda yönteminin true döndürmesini beklersiniz, böylece Assert.IsTrue yöntemini çağırabilirsiniz. Benzer şekilde, büyük harf karakter dışında bir şeyle başlayan birçok dize sağlamak istiyorsunuz. Bu durumlarda yönteminin false döndürmesini beklersiniz, böylece Assert.IsFalse yöntemini çağırabilirsiniz.
Kitaplık yönteminiz, dizeleri işlediğinden, karakter içermeyen, ve String.Empty'si 0 olan geçerli bir boş dizenin () yanı sıra başlatılmamış bir Length dizisini de başarıyla işlediğinden emin olmak istersiniz. Statik bir yöntem olarak doğrudan StartsWithUpper çağırın ve tek bir String bağımsız değişken geçirin. Alternatif olarak, StartsWithUpper değişkenine atanan string üzerinde bir genişletme yöntemi olarak null çağırılabilir.
Her biri bir dize dizisindeki her öğe için bir Assert yöntem çağıran üç yöntem tanımlayın. Test hatası durumunda görüntülenecek hata mesajını belirtmenizi sağlayan bir metot aşırı yüklemesini çağırın. İ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, $"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 NamespaceTestStartsWithUpperyö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.TestDoesNotStartWithUpperyöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.Menü çubuğunda Dosya>UnitTest1.cs Olarak Kaydet'i veya Dosya>UnitTest1.vb Olarak Kaydet'i 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 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 değildir.
Menü çubuğunda Test>Tüm Testleri Çalıştıröğesini seçin. Test Gezgini penceresi açılmazsa, Test>Test 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
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.
wordsyöntemindekiTestDoesNotStartWithUpperdizisini "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.
Test gezgini penceresi, başarısız testlerle,
Başarısız testi seçin
TestDoesNotStartWith.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.
1. adımda 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 Release derlemesine karşı testleri bir kez daha çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere bazı faktörler bazen Debug ve Release derlemeleri arasında farklı davranış sergileyebilir.
Yayın sürümünü test etmek için:
Visual Studio araç çubuğunda, derleme yapılandırmasını Hata Ayıklama'dan Sürüm'e değiştirin.
Çözüm Gezgini'nde StringLibrary projesine sağ tıklayın ve bağlam menüsünden Derleme seçeneğini seçerek kitaplığı yeniden derleyin.
StringLibrary bağlam menüsünde derleme komutu ile
Menü çubuğundan Test>Tüm Testleri Çalıştır seçerek birim testlerini çalıştırın. Testler geçer.
Testlerde hata ayıklama
IDE'niz olarak Visual Studio kullanıyorsanız, Öğreticisi: 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.
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
- Birim testi temelleri - Visual Studio
- .NET'de
Birim testi
Sonraki adımlar
Bu öğreticide bir sınıf kitaplığını birim olarak test ettiniz. NuGet'e paket olarak yayımlayarak kitaplığı başkalarının kullanımına açın. Nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:
Visual Studio kullanarak NuGet paketi 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:
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:
Visual Studio kullanarak bir .NET konsol uygulaması yayımlama