Öğretici: .NET sınıf kitaplığını Visual Studio Code
Bu öğreticide, bir çözüme test projesi ekleyerek birim testini otomatikleştirme işlemi gösterir.
Önkoşullar
- Bu öğretici, 'ı kullanarak .NET sınıf kitaplığı oluşturma'da sizin Visual Studio Code.
Birim testi projesi oluşturma
Birim testleri, geliştirme ve yayımlama sırasında otomatik yazılım testi sağlar. Bu öğreticide kullanabileceğiniz test çerçevesi MSTest'tir. MSTest, 3 test çerçevesinden birini seçebilirsiniz. Diğerleri xUnit ve nUnit'tir.
Visual Studio Code’u başlatın.
.NET
ClassLibraryProjectssınıf kitaplığı oluşturma'da oluşturduğunuz çözümü Visual Studio Code."StringLibraryTest" adlı bir birim testi projesi oluşturun.
dotnet new mstest -o StringLibraryTestProje şablonu aşağıdaki kodla bir UnitTest1.cs 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 kod şunları yapar:
- Birim testi için Microsoft.VisualStudio.TestTools.UnitTesting kullanılan türleri içeren ad alanını içeri aktarıyor.
- özniteliğini TestClassAttribute sınıfına
UnitTest1uygular. - tanımlamak için TestMethodAttribute özniteliğini
TestMethod1uygular.
[TestClass] etiketli bir test sınıfında [TestMethod] ile etiketlenen her yöntem, birim testi çağrıldığında otomatik olarak çalışır.
Test projesini çözüme ekleyin.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Proje başvurusu ekleme
Test projesinin sınıfıyla çalışması StringLibrary için projeye bir başvuru StringLibraryTest StringLibrary ekleyin.
Şu komutu çalıştırın:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Birim testi yöntemleri ekleme ve çalıştırma
Bu Visual Studio bir birim testi çağırsa, özniteliğiyle işaretlenmiş bir sınıfta özniteliğiyle TestMethodAttribute işaretlenmiş her yöntemi TestClassAttribute çalıştırır. Test yöntemi, ilk hata bulunursa veya yönteminde yer alan tüm testler başarılı olduğunda sona erer.
En yaygın testler sınıfının üyelerini Assert arar. Birçok onay yöntemi, biri beklenen test sonucu, diğeri de gerçek test sonucu olan en az iki parametre içerir. Sınıfın Assert 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 nesnelerin eşit olduğunu doğrular. Değerler veya nesneler eşit olmazsa onay başarısız olur. |
Assert.AreSame |
İki nesne değişkeninin aynı nesneye başvurarak doğrular. Değişkenler farklı nesnelere başvurursa onay başarısız olur. |
Assert.IsFalse |
Bir koşulun olduğunu false doğrular. Koşul ise onay başarısız true olur. |
Assert.IsNotNull |
Bir nesnenin olmadığını null doğrular. Nesnesi ise onaylama başarısız null olur. |
Ayrıca, bir test Assert.ThrowsException yönteminde yöntemini kullanarak atacakları özel durum türünü belirtebilirsiniz. Belirtilen özel durum yoksa test başarısız olur.
yöntemini test StringLibrary.StartsWithUpper etmek için büyük harf karakteriyle başlayan bir dizi dize sağlamak istiyor siniz. Yöntemini çağırarak bu true gibi durumlarda yönteminin dönmesini Assert.IsTrue beklersiniz. Benzer şekilde, büyük harf karakterden başka bir şey ile başlayan bir dizi dize sağlamak istediğiniz. Yöntemini çağırarak bu false gibi durumlarda yönteminin dönmesini Assert.IsFalse beklersiniz.
Kitaplık yönteminiz dizeleri işleyeli olduğundan, boş bir dizeyi ( ) ve dizeyi String.Empty başarıyla işleyenin de emin olmak null gerekir. Boş dize, karakter olmayan ve Length 0 olan dizedir. nullDize, başlatılmamış bir dizedir. Doğrudan statik StartsWithUpper bir yöntem olarak çağırabilirsiniz ve tek bir bağımsız değişken String geçebilirsiniz. Veya için atanmış StartsWithUpper bir değişken üzerinde genişletme yöntemi olarak çağrısı string null yapabilirsiniz.
Her biri bir dize dizisinde her öğe için bir Assert yöntem çağıran üç yöntem tanımlayarak. Test hatası durumunda görüntülenecek bir hata iletisi belirtmenize olanak sağlayan bir yöntem aşırı yüklemesi çağırabilirsiniz. İleti, hataya neden olan dizeyi tanımlar.
Test yöntemlerini oluşturmak için:
StringLibraryTest/UnitTest1.cs'yi açın ve tüm 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önteminde büyük harf karakterler testi Yunanca büyük harf
TestStartsWithUpperalfa (U+0391) ve Kiril büyük harfi EM (U+041C) içerir. yönteminde küçük harfli karakterlerin testinde Yunanca küçük harfTestDoesNotStartWithUpperalfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) yer alır.Yaptığınız değişiklikleri kaydedin.
Testleri çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csprojTerminal çıkışı, tüm testlerin başarılı olduğunu gösterir.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0)
Test hatalarını işleme
Test güdümlü geliştirme (TDD) yapıyorsanız önce testleri yazarsınız ve ilk kez çalıştırsanız başarısız olur. Ardından uygulamaya testin başarılı olması için kod eklersiniz. Bu öğreticide, doğrulayan uygulama kodunu yazdıktan sonra testi oluşturduğunuz için testin başarısız olduğunu gördünüz. Testin başarısız olmasını beklediğinizde başarısız olduğunu doğrulamak için test girişine geçersiz bir değer ekleyin.
wordsyönteminde dizisiniTestDoesNotStartWithUpper"Error" dizesini içerecek şekilde değiştirme.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };Testleri çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csprojTerminal çıkışı, bir testin başarısız olduğunu gösterir ve başarısız test için bir hata iletisi sağlar: "Assert.IsFalse başarısız oldu. 'Hata' için bekleniyor: false; actual: True". Hata nedeniyle dizide "Hata" sonrasında hiçbir dize test edilmemiştir.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)-
- adımda eklenen "Error" dizesini kaldırın. Testi yeniden çalıştır ve testler başarılı oldu.
Kitaplığın Yayın sürümünü test edin
Artık kitaplığın Hata Ayıklama derlemesini çalıştırarak testlerin hepsi başarılı olduğuna göre, kitaplığın Yayın derlemesinde testleri bir kez daha ç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ışlara neden olabilir.
Testleri Yayın derleme yapılandırmasıyla çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration ReleaseTestler geçer.
Testlerde hata ayıklama
IDE'niz olarak Visual Studio Code kullanıyorsanız, birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio Code kullanarak bir .NET konsol uygulamasında hata ayıklama'da gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmadan StringLibraryTest/UnitTest1.cs öğesini açın ve 7. ve 8. satırlar arasındaki Tüm Testlerde Hata Ayıkla'ya seçin. Bulamazsanız, komut paletini açmak için CtrlShift P tuşlarına basın ve Pencereyi + + Yeniden Yükle yazın.
Visual Studio Code hata ayıklayıcı eklenmiş olarak test projesini başlatır. Yürütme, test projesine veya temel alınan kitaplık koduna ekledik her kesme noktası için durdurulacak.
Ek kaynaklar
Sonraki adımlar
Bu öğreticide, bir sınıf kitaplığını birim testiyle test ettiysiniz. Kitaplığı paket olarak NuGet başkalarının da kullanılabilir hale ekleyebilirsiniz. Nasıl olduğunu öğrenmek için aşağıdaki öğreticiyi NuGet izleyin:
Bir kitaplığı bir kitaplık paketi NuGet yayımlarsanız, diğerleri bunu yükleyebilir ve kullanabilir. Nasıl olduğunu öğrenmek için aşağıdaki öğreticiyi NuGet izleyin:
Kitaplığın paket olarak dağıtılmasına gerek yok. Bu, onu kullanan bir konsol uygulaması ile paket olabilir. Konsol uygulaması yayımlamayı öğrenmek için bu serinin önceki öğreticiye bakın:
Bu öğreticide, bir çözüme test projesi ekleyerek birim testini otomatikleştirme işlemi gösterir.
Önkoşullar
- Bu öğretici, Visual Studio Code kullanarak bir .NET sınıf kitaplığı oluşturmabölümünde oluşturduğunuz çözümle birlikte kullanılır.
Birim testi projesi oluşturma
Birim testleri geliştirme ve yayımlama sırasında otomatik yazılım testi sağlar. Bu öğreticide kullandığınız test çerçevesi MSTest. MSTest , aralarından seçim yapabileceğiniz üç test çerçevelerinden biridir. Diğerleri xUnit ve NUnit' dir.
Visual Studio Code’u başlatın.
ClassLibraryProjectsVisual Studio Code kullanarak .NET sınıf kitaplığı oluşturmabölümünde oluşturduğunuz çözümü açın."StringLibraryTest" adlı bir birim testi projesi oluşturun.
dotnet new mstest -o StringLibraryTestProje şablonu, aşağıdaki kodla bir UnitTest1. cs 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:
- Microsoft.VisualStudio.TestTools.UnitTestingBirim testi için kullanılan türleri içeren ad alanını içeri aktarır.
- TestClassAttributeÖzniteliği
UnitTest1sınıfına uygular. - TestMethodAttributeTanımlamak için özniteliğini uygular
TestMethod1.
[TestClass] ile etiketlenmiş bir test sınıfında [TestMethod] etiketli her bir yöntem, birim testi çalıştırıldığında otomatik olarak yürütülür.
Çözüme test projesi ekleyin.
dotnet sln add StringLibraryTest/StringLibraryTest.csproj
Proje başvurusu Ekle
Test projesinin sınıfla çalışması için projeye StringLibrary bir başvuru ekleyin StringLibraryTest StringLibrary .
Şu komutu çalıştırın:
dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
Birim testi yöntemleri ekleme ve çalıştırma
Visual Studio bir birim testi çalıştırdığında, özniteliğiyle TestMethodAttribute işaretlenmiş bir sınıfta özniteliğiyle işaretlenmiş her metodu yürütür TestClassAttribute . İlk hata bulunduğunda veya yöntemde bulunan tüm testler başarılı olduğunda bir test yöntemi sonlanır.
En yaygın testler, sınıfının üyelerini çağırır Assert . Birçok onaylama yöntemi, biri beklenen test sonucu ve diğeri de gerçek test sonucu olan en az iki parametre içerir. AssertSınıfın en sık çağrılan yöntemlerin bazıları aşağıdaki tabloda gösterilmiştir:
| Onaylama yöntemleri | İşlev |
|---|---|
Assert.AreEqual |
İki değerin veya nesnenin eşit olduğunu doğrular. Değerler veya nesneler eşitse onaylama başarısız olur. |
Assert.AreSame |
İki nesne değişkeninin aynı nesneye başvurmasını doğrular. Değişkenler farklı nesnelere başvuru yaptığında onaylama başarısız olur. |
Assert.IsFalse |
Bir koşulun olduğunu doğrular false . Koşul ise onaylama başarısız olur true . |
Assert.IsNotNull |
Bir nesnenin olmadığını doğrular null . Nesne ise onaylama başarısız olur null . |
Assert.ThrowsExceptionYöntemi bir test yönteminde, oluşturması beklenen özel durum türünü belirtmek için de kullanabilirsiniz. Belirtilen özel durum atılmazsa, test başarısız olur.
Yöntemi test ederken StringLibrary.StartsWithUpper , büyük harf karakteriyle başlayan bir dizi dize sağlamak istersiniz. Yöntemi bu durumlarda Return olarak beklediğinizi ve true Assert.IsTrue yöntemi çağırabilirsiniz. Benzer şekilde, büyük harfli bir karakter ile başlayan bir dizi dize sağlamak istersiniz. Yöntemi bu durumlarda Return olarak beklediğinizi ve false Assert.IsFalse yöntemi çağırabilirsiniz.
Kitaplık yönteminiz dizeleri yaptığından, ayrıca boş bir dizeyi ( String.Empty ) ve bir dizeyi başarılı bir şekilde işleyeceğinden emin olmak istersiniz null . Boş bir dize, karakteri olmayan ve 0 olan bir dizedir Length . Bir null dize başlatılmamış bir dizedir. StartsWithUpperDoğrudan statik bir yöntem olarak çağırabilir ve tek bir String bağımsız değişken geçirebilirsiniz. Ya da StartsWithUpper öğesine atanan bir değişkende bir genişletme yöntemi olarak çağırabilirsiniz string null .
Her biri Assert 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 imkan tanıyan bir yöntem aşırı yüklemesi çağıracaksınız. İleti, hataya neden olan dizeyi tanımlar.
Test yöntemleri oluşturmak için:
Stringlibrarytest/UnitTest1. cs ' i açın ve tüm kodu 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, 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öntemdeki büyük harfli karakterlerin testi,
TestStartsWithUpperYunanca Büyük Harf Alpha (u + 0391) ve Kiril Büyük harf em (u + 041C) içerir. Yöntemdeki küçük harfli karakterlerin testiTestDoesNotStartWithUpperYunanca Küçük Harf Alpha (u + 03B1) ve Kiril Küçük harf GHE (u + 0433) içerir.Yaptığınız değişiklikleri kaydedin.
Testleri çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csprojTerminal çıktısı tüm testlerin geçtiğini gösterir.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net5.0)
Test başarısızlıklarını işle
Test odaklı geliştirme (TDD) yapıyorsanız, önce testleri yazarsınız ve ilk kez çalıştırdığınızda başarısız olur. Sonra, uygulamayı başarılı hale getiren uygulamaya kod eklersiniz. Bu öğreticide, doğrulaması yaptığı uygulama kodunu yazdıktan sonra test başarısız olduğunu görmediyseniz testi oluşturdunuz. Başarısız olması beklendiğinde testin başarısız olduğunu doğrulamak için, test girişine geçersiz bir değer ekleyin.
wordsYöntemdeki diziyi,TestDoesNotStartWithUpper"Error" dizesini içerecek şekilde değiştirin.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };Testleri çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csprojTerminal çıktısı bir testin başarısız olduğunu gösterir ve başarısız test için bir hata iletisi sağlar: "onaylama. IsFalse başarısız oldu. ' Error ' bekleniyor: false; gerçek: true ". Hata nedeniyle "hata" sonunda dizide hiçbir dize sınanmadı.
Starting test execution, please wait... A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0)Adım 1 ' de eklediğiniz "Error" dizesini kaldırın. Testi ve test geçişini yeniden çalıştırın.
Kitaplığın yayın sürümünü test etme
Artık, kitaplığın hata ayıklama derlemesini çalıştırırken testlerin başarılı olduğuna göre, bu testleri kitaplığın yayın derlemesi için ek bir zaman çalıştırın. Derleyici iyileştirmeleri dahil olmak üzere bir dizi etken bazen hata ayıklama ve yayın yapıları arasında farklı davranışlar üretebilir.
Testleri yayın yapı yapılandırmasıyla çalıştırın:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration ReleaseTestler geçer.
Hata ayıklama testleri
ıde 'niz olarak Visual Studio Code kullanıyorsanız, birim testi projenizi kullanarak kodun hatalarını ayıklamak için Visual Studio Code kullanarak bir .net konsol uygulamasında hata ayıklama sırasında gösterilen aynı işlemi kullanabilirsiniz. Gösterimi uygulama projesini başlatmak yerine stringlibrarytest/UnitTest1. cs açın ve 7 ve 8 çizgileri arasındaki tüm testlerin hatalarını ayıkla ' yı seçin. Bunu bulamıyorsanız, CTRL + SHIFT + P tuşlarına basarak komut paletini açın ve yeniden yükle penceresini girin.
Visual Studio Code, test projesini hata ayıklayıcı ekli olarak başlatır. Yürütme, test projesine veya temeldeki kitaplık koduna eklediğiniz herhangi bir kesme noktasında durur.
Ek kaynaklar
Sonraki adımlar
Bu öğreticide, birim bir sınıf kitaplığı test edilmiştir. bir paket olarak NuGet , kitaplığı başkaları tarafından kullanılabilir hale getirebilirsiniz. nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:
bir kitaplığı NuGet paketi olarak yayımlarsanız, diğerleri onu yükleyebilir ve kullanabilir. nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:
Bir kitaplığın paket olarak dağıtılması gerekmez. Onu kullanan bir konsol uygulamasıyla paketlenmiş olabilir. Bir konsol uygulamasını yayımlamayı öğrenmek için bu serideki önceki öğreticiye bakın:
Bu öğretici yalnızca .NET 5 ve .NET 6 ' da kullanılabilir. Sayfanın üst kısmında bu seçeneklerden birini belirleyin.