Live Unit Testing kullanmaya başlama
bir Visual Studio çözümünde Live Unit Testing etkinleştirdiğinizde, test kapsamınız ve testlerinizin durumunu görsel olarak gösterir. Live Unit Testing Ayrıca, kodunuzun her değişiklik yaptığınızda testleri dinamik olarak yürütür ve değişiklikleriniz testlerin başarısız olmasına neden olduğunda sizi anında bilgilendirir.
Live Unit Testing, .NET Framework ya da .net Core ' u hedefleyen çözümleri test etmek için kullanılabilir. Bu öğreticide, .NET Standard hedefleyen basit bir sınıf kitaplığı oluşturarak Live Unit Testing kullanacağınızı öğrenirsiniz ve test etmek üzere .NET Core 'u hedefleyen bir MSTest projesi oluşturacaksınız.
Tam C# çözümü, GitHub microsoftdocs/VisualStudio-docs deposundan indirilebilir.
Önkoşullar
bu öğreticide, .net Core platformlar arası geliştirme iş yüküne Visual Studio Enterprise edition sürümünü yüklemiş olmanız gerekir.
Çözüm ve sınıf kitaplığı projesi oluşturma
tek bir .NET Standard sınıf kitaplığı projesi olan stringlibrary ' den oluşan bir Visual Studio çözümü oluşturarak başlayın.
Çözüm yalnızca bir veya daha fazla proje için bir kapsayıcıdır. boş bir çözüm oluşturmak için Visual Studio açın ve aşağıdakileri yapın:
-
üst düzey Visual Studio menüsünden dosya yeni Project seçin.
Şablon arama kutusuna çözüm yazın ve ardından boş çözüm şablonunu seçin. Projenin kullanımı Tylibraries olarak adlandırın.

Çözümü oluşturmayı tamamlama.
Çözümü oluşturduğunuza göre, dizeler ile çalışmak için birkaç uzantı yöntemi içeren StringLibrary adlı bir sınıf kitaplığı oluşturacaksınız.
- Çözüm Gezgini' de, kullanımı, ek yazım kitaplıkları çözümüne sağ tıklayın ve > yeni Project ekle ' yi seçin.
yeni Project ekle iletişim kutusunda C# düğümünü ve ardından .NET Standard' ı seçin.
Not
Kitaplığımız belirli bir .NET uygulamasının yerine .NET Standard hedeflediğinden, bu .NET Standard sürümünü destekleyen herhangi bir .NET uygulamasından çağrılabilir. Daha fazla bilgi için bkz. .NET Standard.
Sağ bölmedeki sınıf kitaplığı (.NET Standard) şablonunu seçin ve aşağıdaki çizimde gösterildiği gibi ad metin kutusuna StringLibrary yazın:

Projeyi oluşturmak için Tamam'ı seçin.
Şablon arama kutusuna sınıf kitaplığı yazın ve sınıf kitaplığı (.NET Standard) şablonunu seçin. İleri’ye tıklayın.
Not
Kitaplığımız belirli bir .NET uygulamasının yerine .NET Standard hedeflediğinden, bu .NET Standard sürümünü destekleyen herhangi bir .NET uygulamasından çağrılabilir. Daha fazla bilgi için bkz. .NET Standard.
Proje StringLibrary olarak adlandırın.
Projeyi oluşturmak için Oluştur ' a tıklayın.
Kod düzenleyicisinde varolan tüm kodu aşağıdaki kodla değiştirin:
using System; namespace UtilityLibraries { public static class StringLibrary { public static bool StartsWithUpper(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsUpper(s[0]); } public static bool StartsWithLower(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsLower(s[0]); } public static bool HasEmbeddedSpaces(this string s) { foreach (var ch in s.Trim()) { if (ch == ' ') return true; } return false; } } }StringLibrary üç statik yönteme sahiptir:
StartsWithUpper``truebir dize, büyük harfle başlıyorsa döndürür; Aksi takdirde, döndürürfalse.StartsWithLower``truebir dize küçük harf karakteriyle başlıyorsa döndürür; Aksi takdirde, döndürürfalse.HasEmbeddedSpaces``truebir dize gömülü bir boşluk karakteri içeriyorsa döndürür; Aksi takdirde, döndürürfalse.
-
üst düzey Visual Studio menüsünden build build Solution öğesini seçin. Derleme başarılı olmalıdır.
Test projesi oluşturma
Sonraki adım, StringLibrary kitaplığını test etmek için birim test projesi oluşturmaktır. Aşağıdaki adımları gerçekleştirerek birim testlerini oluşturun:
- Çözüm Gezgini' de, kullanımı, ek yazım kitaplıkları çözümüne sağ tıklayın ve > yeni Project ekle ' yi seçin.
yeni Project ekle iletişim kutusunda C# düğümünü seçin, sonra .net Core' u seçin.
Not
Birim testlerinizi, sınıf kitaplığınız ile aynı dilde yazmanız gerekmez.
sağ bölmedeki birim testi Project (.net Core) şablonunu seçin ve aşağıdaki çizimde gösterildiği gibi ad metin kutusuna stringlibrarytests yazın:

Projeyi oluşturmak için Tamam'ı seçin.
Not
Bu Başlangıç Öğreticisi, MSTest test çerçevesiyle Live Unit Testing kullanır. Ayrıca xUnit ve NUnit test çerçevelerini de kullanabilirsiniz.
şablon arama kutusuna birim testi yazın, dil olarak C# ' yi seçin ve ardından .net Core şablonu için birim testi Project seçin. İleri’ye tıklayın.
Not
Visual Studio 2019 sürüm 16,9 ' den başlayarak, mstest proje şablonu adı mstest birim testi Project (.net Core) iken birim testi Project olarak değiştirildi.
Projeyi Stringlibrarytests olarak adlandırın ve İleri' ye tıklayın.
Önerilen hedef Framework veya .NET 6 ' ı seçin ve ardından Oluştur' u seçin.
Not
Bu Başlangıç Öğreticisi, MSTest test çerçevesiyle Live Unit Testing kullanır. Ayrıca xUnit ve NUnit test çerçevelerini de kullanabilirsiniz.
Birim testi projesi test edilen sınıf kitaplığına otomatik olarak erişemez. Sınıf kitaplığı projesine bir başvuru ekleyerek test Kitaplığı erişimi verirsiniz. Bunu yapmak için projeye sağ tıklayın
StringLibraryTestsve başvuru Ekle ' yi seçin > . Başvuru Yöneticisi iletişim kutusunda, çözüm sekmesinin seçili olduğundan emin olun ve aşağıdaki çizimde gösterildiği gibi StringLibrary projesini seçin.
Şablon tarafından sunulan ortak birim test kodunu şu 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, $"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 ? "<null>" : word)}': " + $"false; Actual: {result}"); } } } }Araç çubuğundaki Kaydet simgesini seçerek projenizi kaydedin.
Birim test kodu bazı ASCII olmayan karakterler içerdiğinden, dosyayı varsayılan ASCII biçiminde kaydederseniz bazı karakterlerin kaybolacağını uyarmak için aşağıdaki iletişim kutusunu görürsünüz.
Diğer kodlamaya sahip Kaydet düğmesini seçin.

Aşağıdaki çizimde gösterildiği gibi, Gelişmiş kaydetme seçenekleri Iletişim kutusunun kodlama açılan LISTESINDE Unicode (imzasız UTF-8)-kod sayfası 65001' ı seçin:

-
üst düzey Visual Studio menüsünden derleme yeniden oluşturma çözümünü seçerek birim testi projesini derleyin.
Bir sınıf kitaplığı ve bunun için bazı birim testlerini oluşturdunuz. Artık Live Unit Testing kullanmak için gereken başlangıç kuralları tamamladınız.
Live Unit Testing etkinleştir
Şimdiye kadar, StringLibrary sınıf kitaplığı için testleri yazmış olsanız da onları çalıştırmadınız. Live Unit Testing, bunları etkinleştirdikten sonra otomatik olarak yürütür. Bunu yapmak için aşağıdakileri yapın:
İsteğe bağlı olarak, StringLibrary kodunu içeren kod düzenleyici penceresini seçin. bu, bir C# projesi için class1. cs veya bir Visual Basic projesi için class1. vb ' dir. (Bu adım, Live Unit Testing etkinleştirdikten sonra testlerinizin sonucunu ve kod kapsamınız kapsamını görsel olarak incelemenize olanak sağlar.)
-
en üst düzey Visual Studio menüsünden Test Live Unit Testing başlat ' ı seçin.
Visual Studio, tüm testlerinizi otomatik olarak çalıştıran canlı birim testi başlatır.
Testlerinizi çalıştırmayı bitirdiğinde, Test Gezgini hem genel sonuçları hem de bireysel testlerin sonucunu görüntüler. Ayrıca, kod Düzenleyicisi penceresi hem test kodu kapsamınızla hem de testleriniz için sonucu grafik olarak görüntüler. Aşağıdaki çizimde gösterildiği gibi, üç testin hepsi başarıyla yürütülür. Ayrıca, testlerimizin yöntemdeki tüm kod yollarını kapsadığından StartsWithUpper ve bu testlerin başarıyla yürütüldüğü (yeşil onay işareti, "✓" ile belirtilir) gösterilmektedir. Son olarak, StringLibrary 'deki diğer yöntemlerin hiçbirinin kod kapsamı (mavi bir çizgi ile belirtilir, "➖") olduğunu gösterir.

Testlerinizi çalıştırmayı bitirdiğinde Live Unit Testing hem genel sonuçları hem de tek testlerin sonucunu görüntüler. Ayrıca, kod Düzenleyicisi penceresi hem test kodu kapsamınızla hem de testleriniz için sonucu grafik olarak görüntüler. Aşağıdaki çizimde gösterildiği gibi, üç testin hepsi başarıyla yürütülür. Ayrıca, testlerimizin yöntemdeki tüm kod yollarını kapsadığından StartsWithUpper ve bu testlerin başarıyla yürütüldüğü (yeşil onay işareti, "✓" ile belirtilir) gösterilmektedir. Son olarak, StringLibrary 'deki diğer yöntemlerin hiçbirinin kod kapsamı (mavi bir çizgi ile belirtilir, "➖") olduğunu gösterir.

Ayrıca, kod Düzenleyicisi penceresinde belirli bir kod kapsamı simgesini seçerek test kapsamı ve test sonuçları hakkında daha ayrıntılı bilgi edinebilirsiniz. Bu ayrıntıyı incelemek için aşağıdakileri yapın:
Yönteminde okuyan satırdaki yeşil onay işaretine tıklayın
if (String.IsNullOrWhiteSpace(s))StartsWithUpper. Aşağıdaki çizimde gösterildiği gibi, Live Unit Testing üç testin bu kod satırını kapsadığını ve tümünün başarıyla yürütüldüğünü gösterir.
Yönteminde okuyan satırdaki yeşil onay işaretine tıklayın
return Char.IsUpper(s[0])StartsWithUpper. Aşağıdaki çizimde gösterildiği gibi Live Unit Testing yalnızca iki testin bu kod satırına sahip olduğunu ve tüm testlerin başarıyla yürütülmektedir.
Tanımlanmamış kod Live Unit Testing büyük sorun eksik kod kapsamıdır. Bunu bir sonraki bölümde ele alasiniz.
Test kapsamını genişletme
Bu bölümde birim testlerinizi yöntemine StartsWithLower genişletebilirsiniz. Bunu yaparken, Live Unit Testing dinamik olarak kodunuzu test etmeye devam eder.
Kod kapsamı yönteminin StartsWithLower kapsamına genişletmek için şunları yapın:
Projenizin
TestStartsWithLowerTestDoesNotStartWithLowertest kaynak kodu dosyasına aşağıdaki ve yöntemlerini ekleyin:// Code to add to UnitTest1.cs [TestMethod] public void TestStartsWithLower() { // Tests that we expect to return true. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство" }; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithLower() { // Tests that we expect to return false. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва", "1234", ".", ";", " "}; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } }yöntemine
DirectCallWithNullOrEmptyyapılan çağrıdan hemen sonra aşağıdaki kodu ekleyerek yönteminiMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalsedeğiştirme.// Code to add to UnitTest1.cs result = StringLibrary.StartsWithLower(word); Assert.IsFalse(result, $"Expected for '{(word == null ? "<null>" : word)}': " + $"false; Actual: {result}");Live Unit Testing kodunuzu değiştirerek yeni ve değiştirilmiş testleri otomatik olarak yürütür. Aşağıdaki çizimde gösterildiği gibi, eklemış olduğunuz ikisi ve değiştirdklerinden biri de dahil olmak üzere tüm testler başarılı oldu.


StringLibrary sınıfının kaynak kodunu içeren pencereye geçiş. Live Unit Testing kod kapsamımızın yöntemine genişletildi olduğunu
StartsWithLowergösteriyor.
Bazı durumlarda Test Gezgini'nde başarılı testler gri olabilir. Bu, bir testin yürütültülürken olduğunu veya son yürütülürken testi etkileyen bir kod değişikliği olmadığını çünkü testin yeniden çalıştırılamay olmadığını gösterir.
Şimdiye kadar tüm testlerimiz başarılı oldu. Sonraki bölümde test hatalarını nasıl işleyebilirsiniz?
Test hatalarını işleme
Bu bölümde test hatalarını tanımlamak, gidermek ve Live Unit Testing için bu Live Unit Testing nasıl kullanabileceğiniz hakkında bilgi edinebilirsiniz. Bunu yapmak için test kapsamını yöntemine HasEmbeddedSpaces genişletebilirsiniz.
Test dosyanıza aşağıdaki yöntemi ekleyin:
[TestMethod] public void TestHasEmbeddedSpaces() { // Tests that we expect to return true. string[] phrases = { "one car", "Name\u0009Description", "Line1\nLine2", "Line3\u000ALine4", "Line5\u000BLine6", "Line7\u000CLine8", "Line0009\u000DLine10", "word1\u00A0word2" }; foreach (var phrase in phrases) { bool result = phrase.HasEmbeddedSpaces(); Assert.IsTrue(result, $"Expected for '{phrase}': true; Actual: {result}"); } }Test yürütülürken Live Unit Testing yöntemin başarısız
TestHasEmbeddedSpacesolduğunu gösterir. Aşağıdaki çizimde gösterildiği gibi:

Kitaplık kodunu görüntüleyen pencereyi seçin. Live Unit Testing kapsamı yöntemine
HasEmbeddedSpacesgenişletti. Ayrıca başarısız olan testlerin kapsamına alınan satırlara kırmızı 🞩 " " ekleyerek test hatalarını raporlar.Metot imzası olan satırın
HasEmbeddedSpacesüzerine gelin. Live Unit Testing, aşağıdaki çizimde gösterildiği gibi yöntemin bir test kapsamında olduğunu rapor eden bir araç ipucu görüntüler:
Başarısız TestHasEmbeddedSpaces testini seçin. Live Unit Testing, aşağıdaki çizimde gösterildiği gibi tüm testleri çalıştırma ve tüm testlerde hata ayıklama gibi birkaç seçenek sunar:


Başarısız testte hata ayıklamak için Tüm Hata Ayıkla'ya seçin.
Visual Studio hata ayıklama modunda yürütür.
Test, dizide yer alan her dizeyi adlı bir değişkene atar
phraseve yöntemineHasEmbeddedSpacesiletir. Program yürütmesi, onay ifadesi ilk kez olduğu zaman duraklatılır ve hata ayıklayıcıyıfalseçağırır. Yöntem çağrısında beklenmeyen değerden sonuç alan özelMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsTruedurum iletişim kutusu aşağıdaki çizimde gösterilmiştir.
Ayrıca, aşağıdaki çizimde gösterildiği gibi Visual Studio hata ayıklama araçlarının hepsi başarısız testimizin sorunlarını gidermemize yardımcı olmak için kullanılabilir:

Otomatikler penceresinde değişkenin değerinin dizinin ikinci öğesi olan
phrase"Name\tDescription" olduğunu unutmayın. Test yöntemi, buHasEmbeddedSpacesdizetruegeçiriken dönüş bekler; bunun yerinefalsedöndürür. Görünen o ki sekme karakteri olan "\t" karakterini ekli alan olarak tanımaz.Devamında Hata > Ayıkla'yı seçin, F5 tuşuna basın veya test programını yürütmeye devam etmek için araç çubuğundaKi Devam düğmesine tıklayın. İşlenemeyen bir özel durum meydana geldiği için test sonlandırılır. Bu, hatanın ön araştırması için yeterli bilgi sağlar. (Test
TestHasEmbeddedSpacesyordamı) yanlış bir varsayımda bulunduHasEmbeddedSpacesveya tüm ekli alanları doğru şekilde tanımıyor.Sorunu tanılamak ve düzeltmek için yöntemiyle
StringLibrary.HasEmbeddedSpacesçalışmaya başlamanız gerekir. yönteminde karşılaştırmayaHasEmbeddedSpacesbakın. Ekli bir alanı U+0020 olarak kabul ediyor. Ancak, Unicode Standart bir dizi başka boşluk karakteri içerir. Bu, kitaplık kodunun yanlış bir şekilde boşluk karakteri için test edilmiş olduğunu önerir.Eşitlik karşılaştırmasını yöntemine yapılan bir çağrıyla System.Char.IsWhiteSpace değiştirin:
if (Char.IsWhiteSpace(ch))Live Unit Testing başarısız test yöntemini otomatik olarak yeniden çalıştırıyor.
Live Unit Testing, kod düzenleyicisi penceresinde de görünen güncelleştirilmiş sonuçları gösterir.