Asp.Net'te BİRİM TESTİ: Eğitimin Tamamı

⚡ Akıllı Özet

Visual Studio'da bir ASP.NET uygulamasının birim testine başlamak için, bir Birim Test Projesi oluşturulur, hedef projeye bir referans bağlanır, MSTest [TestClass] ve [TestMethod] öznitelikleri eklenir ve sınıfların tasarlandığı gibi davrandığını kanıtlamak için Assert yöntemleri çağrılır.

  • 🧪 Test Projesi: ASP.NET çözümüne bir birim test projesi ekleyin ve doğrulamak istediğiniz hedef projeyi referans gösterin.
  • ???? ️ Özellikler: MSTest'in bunları bulabilmesi için sınıfı [TestClass] ve her testi [TestMethod] ile işaretleyin.
  • iddialar: Her testin beklenen sonucunu belirtmek için Assert.AreEqual, Assert.IsTrue ve benzeri çağrıları kullanın.
  • ▶ ️ Testleri Çalıştırın: Visual Studio'da "Testleri Çalıştır" menüsünden "Tüm Testleri Çalıştır" seçeneğini kullanarak başarılı ve başarısız test sonuçlarını Test Gezgini'nde inceleyebilirsiniz.
  • 🇧🇷 Çerçeve Seçimi: MSTest, NUnit ve xUnit'in tümü `dotnet test` komutuyla çalışır; MSTest varsayılan olarak gelir, xUnit ise ASP.NET Core için tercih edilir.
  • En iyi pratik: Birimi izole edin, Arrange Act Assert adımlarını izleyin ve tüm paketi hızlı tutarak her commit işleminde çalışmasını sağlayın.

ASP.NET'te Birim Testi

Test, herhangi bir programlama dilinin önemli bir yönüdür. Test yapmak ASP.NET uygulamaları için bu, Visual Studio yardımıyla mümkündür.

Visual Studio, test kodu oluşturmak için kullanılır. Ayrıca ASP.NET uygulaması için test kodunu çalıştırmak için de kullanılır. Bu sayede, bir ASP.NET uygulamasındaki hataları kontrol etmek kolaylaşır. Visual Studio'da, test modülü kullanıma hazır bir işlevsellikle birlikte gelir. Bir kişi doğrudan bir ASP.NET projesi için test gerçekleştirebilir.

ASP.NET için test etmeye giriş

ASP.NET projesinin test edilmesinin ilk aşaması birim düzeyinde testtir. Bu test, uygulamanın işlevselliğini ölçer. Test, uygulamanın beklendiği gibi davrandığından emin olmak için yapılır. ASP.NET'te ilk görev, Visual Studio'da bir test projesi oluşturmaktır. Test projesi, uygulamayı test etmek için gerekli kodu içerecektir.

Aşağıdaki web sayfasını ele alalım. Sayfada şu mesaj yer almaktadır:Guru"99 – ASP.NET" mesajı görüntüleniyor. Peki, bir ASP.NET projesi çalıştırıldığında doğru mesajın görüntülendiğini nasıl doğrulayabiliriz? Bu, ASP.NET çözümüne (web tabanlı uygulamalar geliştirmek için kullanılır) bir test projesi ekleyerek yapılır. Bu test projesi, kullanıcıya doğru mesajın görüntülendiğinden emin olacaktır.

ASP.NET için test etmeye giriş

Şimdi daha detaylı inceleyelim ve ASP.NET'te test etme çalışmalarını nasıl yürütebileceğimizi görelim.

.NET Birim Test Projesi Oluşturma

Bir test projesi oluşturmadan önce aşağıdaki üst düzey adımları uygulamamız gerekiyor.

  1. Önceki bölümlerde kullanılan 'DemoUygulamamızı' kullanın. Bu test edilmesi gereken uygulamamız olacaktır.
  2. DemoApplication'a yeni bir sınıf ekleyeceğiz. Bu sınıf, ' adlı bir dize içerecektir.Guru99 – ASP.NET.' Bu dize, test projemizde test edilecektir.
  3. Son olarak, bir test projesi oluşturacağız. Bu proje, ASP.NET uygulamasını test etmek için kullanılacaktır.

Öyleyse yukarıdaki genel adımları izleyelim ve test işleminin nasıl uygulanacağını görelim.

) 1 Adım DemoApplication'ın Visual Studio'da açık olduğundan emin olun.

) 2 Adım Şimdi DemoApplication'a yeni bir sınıf ekleyelim. Bu sınıf, ' adlı bir dize içerecektir.Guru99 – ASP.NET.' Bu dize, test projemizde test edilecektir.

Yeni bir sınıf eklemek için aşağıdaki adımı izleyin.

.NET Birim Test Projesi Oluşturma

  1. Visual Studio'da Çözüm Gezgini'nde 'DemoApplication'a sağ tıklayın.
  2. Bağlam menüsünden Ekle->Sınıf seçeneğini seçin.

) 3 Adım Bu adımda,

.NET Birim Test Projesi Oluşturma

  1. Yeni sınıfa 'Tutorial.cs' adını verin.
  2. Dosyayı DemoUygulamasına eklemek için 'Ekle' düğmesine tıklayın.

Artık “DemoApplication” dosyasına yeni bir sınıf eklendi.

) 4 Adım “DemoApplication” klasöründen yeni Tutorial.cs dosyasını açın. “Guru99 – ASP.NET.”

Dosyayı açmak için Çözüm Gezgini'ndeki Tutorial.cs dosyasına çift tıklayın.

.NET Birim Test Projesi Oluşturma

Dosyada önceden yazılmış bazı varsayılan kodlar bulunur. Bu kodla uğraşmayın, sadece aşağıdaki kod satırını ekleyin.

.NET Birim Test Projesi Oluşturma

namespace DemoApplication
{
  public class Tutorial
  {
     public String Name;
     public Tutorial()
     {
        Name = "Guru99 - ASP.Net";
     }
  }
}

Code Açıklama:-

  1. Name değişkeni string türündedir.
  2. Son olarak, Tutorial sınıfının yapıcı metodunda, Name değişkenine değer atayın. Değer, "Guru99 – ASP.NET”

) 5 Adım Şimdi demo.aspx dosyasına gidin ve " metnini görüntülemek için aşağıdaki kod satırlarını ekleyin.Guru99 – ASP.NET.”

.NET Birim Test Projesi Oluşturma

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
    <body>
    <form id="form1" runat="server">
    <div>
        <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%>
        <%=tp.Name%>
    </div>
    </form>
    </body>
</html>

Code Açıklama:-

  1. İlk satır, 'Tutorial' sınıfından bir nesne oluşturur. Bu, sınıflar ve nesnelerle çalışırken atılacak ilk adımdır. Nesneye verilen isim 'tp'dir.
  2. Son olarak demo.aspx dosyasından 'tutorial.cs' adını veriyoruz. Ad değişkeninin değerini görüntüler.

Yukarıdaki programı Visual Studio'da çalıştırdığınızda aşağıdaki çıktıyı alacaksınız.

Çıktı:-

.NET Birim Test Projesi Oluşturma

Çıktıda şu mesajı görüyorsunuz: “Guru99 – ASP.NET” görüntülendi.

) 6 Adım Şimdi test projemizi Demo Uygulamasına ekleyelim. Bu işlem Visual Studio yardımıyla yapılır.

.NET Birim Test Projesi Oluşturma

  1. Çözüm – DemoApplication'a sağ tıklayın.
  2. Bağlam menüsünde 'Yeni Proje' seçeneğini seçin.

) 7 Adım Adım, Birim Testi projesinin demo uygulamasına eklenmesini içerir.

.NET Birim Test Projesi Oluşturma

  1. Sol taraftaki panelden 'Test' olarak öğe türüne tıklayın.
  2. İletişim kutusunun orta kısmında görünen listeden 'Birim Test Projesi' öğesini seçin.
  3. Test projesine bir ad verin. Bizim durumumuzda verilen isim 'DemoTest'tir.
  4. Son olarak 'Tamam' butonuna tıklayın.

Sonunda DemoTest projesinin çözüm gezginine eklendiğini göreceksiniz. Bununla, UnitTest1.cs, özellikler vb. gibi diğer dosyaların da varsayılan olarak oluşturulduğunu görebilirsiniz.

.NET Birim Test Projesi Oluşturma

Test Projesini Çalıştırma

Önceki bölümde oluşturulan test projesi, ASP.NET uygulamamızı test etmek için kullanılır. Aşağıdaki adımlarda, test projesini nasıl çalıştıracağımızı göreceğiz.

  • İlk adım, ASP.NET projesine bir referans eklemek olacaktır. Bu adım, test projesinin ASP.NET projesine erişebilmesi için gerçekleştirilir.
  • Daha sonra test kodumuzu yazacağız.
  • Son olarak testi Visual Studio kullanarak çalıştıracağız.

) 1 Adım Demo Uygulamamızı test etmek için öncelikle test projesinin Demo Uygulamasına referans vermesi gerekmektedir. Demo.aspx çözümüne bir başvuru ekleyin.

.NET Test Projesini Çalıştırma

  1. Demo Testi projesine sağ tıklayın
  2. Menüden Ekle->Referans seçeneğini seçin.

) 2 Adım Bir sonraki adım DemoApplication'a bir referans eklemektir.

.NET Test Projesini Çalıştırma

  1. İletişim kutusunun sol tarafındaki Projeler seçeneğini seçin
  2. DemoApplication'ın yanındaki onay kutusunu tıklayın
  3. 'Tamam' düğmesine tıklayın.

Bu, demotest projesinin DemoUygulamamızı test etmesine olanak tanıyacaktır.

) 3 Adım Şimdi test kodunu test projemize ekleme zamanı geldi.

  • Bunun için öncelikle Çözüm Gezgini'ndeki UnitTest1 (UnitTest1 dosyası, Test projesi oluşturulduğunda Visual Studio tarafından otomatik olarak eklenir) dosyasına çift tıklayın.
  • Bu dosya, ASP.NET projesini test etmek için çalıştırılacak dosyadır.

.NET Test Projesini Çalıştırma

Visual Studio tarafından UnitTest1.cs dosyasına eklenen aşağıdaki kodu göreceksiniz. Bu, test projesinin çalışması için gereken temel koddur.

.NET Test Projesini Çalıştırma

) 4 Adım Sonraki adım, " dizesini test etmek için kullanılan kodu eklemektir."Guru99 – ASP.NET.”

.NET Test Projesini Çalıştırma

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoApplication;

namespace DemoTest
{
 [TestClass]
 public class UnitTest1
 {
   [TestMethod]
   public void TestMethod1()
   {
      Tutorial tp = new Tutorial();
      Assert.AreEqual(tp.Name,"Guru99 - ASP.Net");
   }
 }
}
  1. Öğretici türünde 'tp' adında yeni bir nesne oluşturun
  2. .NET'te Assert.AreEqual metodu, bir değerin başka bir şeye eşit olup olmadığını test etmek için kullanılır. Dolayısıyla, bizim örneğimizde tp.Name değerini başka bir değerle karşılaştırıyoruz. Guru99 – ASP.NET.

) 5 Adım Şimdi test projemizi çalıştıralım. Bunun için Test -> Çalıştır -> Tüm Testler menü seçeneğine gitmemiz gerekiyor.

.NET Test Projesini Çalıştırma

Çıktı:-

.NET Test Projesini Çalıştırma

Visual Studio'da bir test Explorer penceresi görünecektir. Bu, yukarıdaki sonucu gösterecek ve Visual Studio'da başarılı bir testin çalıştırıldığını gösterecektir.

Kullanacağınız MSTest Nitelikleri ve Doğrulama İfadeleri

MKS Microsoft.VisualStudio.TestTools.UnitTesting ad alanı, ASP.NET birim testlerinin çoğunu kapsayan küçük bir dizi özellik ve doğrulama içerir. Bunları önceden öğrenmek, daha sonraki tüm testleri okumayı ve sürdürmeyi kolaylaştırır.

  • [TestSınıfı] – Bu özellik, sınıfı testlerin yer aldığı bir kapsayıcı olarak işaretler. MSTest, keşif aşamasında bu özelliğe sahip sınıfları tarar.
  • [TestMethod] – parametresiz, herkese açık bir metodu ayrı bir test olarak işaretler. Bu metot void, Task veya ValueTask döndürür.
  • [TestBaşlatma] / [TestTemizleme] – Her test yönteminden önce ve sonra çalıştırın. Bunları, sahte bir depo veya bellek içi bağlam gibi paylaşılan kurulumlar oluşturmak ve kaldırmak için kullanın.
  • [Sınıf Başlatma] / [Sınıf Temizleme] – Tüm sınıf için bir kez çalıştırılır. Kurulum maliyetli olduğunda, örneğin test veritabanına veri eklerken kullanışlıdırlar.
  • [VeriSatırı] ve [VeriTestMetodu] – Tek bir test yönteminin birden fazla durumu kapsayabilmesi için parametrelendirilmiş girdiler sağlayın.

Her test metodunun içinde, Assert sınıfı sonucu kontrol eder. Yaygın çağrılar arasında değer karşılaştırmaları için Assert.AreEqual, boolean'lar için Assert.IsTrue ve Assert.IsFalse, referanslar için Assert.IsNull ve Assert.IsNotNull ve beklenen istisnalar için Assert.ThrowsException bulunur. Kurulum, çağrı ve doğrulamanın görsel olarak ayrı kalması için her testi Arrange, Act, Assert kalıbını kullanarak yapılandırın. Bu düzen, başarısız olan testlerin hata ayıklamasını kolaylaştırır çünkü başarısız olan satır neredeyse her zaman en alttaki tek Assert satırıdır.

ASP.NET için MSTest, NUnit ve xUnit Karşılaştırması

.NET ekosistemine üç test çerçevesi hakimdir. Her biri Visual Studio içinde çalışır ve dotnet test ile entegre olur, bu nedenle aralarındaki fark çoğunlukla stil, topluluk desteği ve varsayılan davranıştan kaynaklanır.

  • MST testi – tarafından gönderildi Microsoft ve bu eğitimde daha önce kullanılan Visual Studio Birim Testi Projesi şablonu önceden yüklenmiş olarak gelir. Bir ekip birim testine yeni başladığında en güvenli varsayılan seçenektir. Microsoft yığını.
  • NUnit – üçünün en eskisi, aslen şuradan aktarılmıştı: JUnitZengin bir kısıtlama modeli, TestCase ve TestCaseSource aracılığıyla parametrelendirilmiş testler ve her .NET sürümünde olgun destek sunar.
  • xUnit.net – ASP.NET Core ve Entity Framework Core ekipleri tarafından dahili olarak kullanılır. SetUp metodunu kurucu metot ve IDisposable ile değiştirir, davranış başına bir test sınıfı kullanılmasını teşvik eder ve [TestMethod] yerine [Fact] ve [Theory] kullanır.

Her üç çerçeve de testleri öznitelikler aracılığıyla keşfeder, dotnet test komutuyla çalıştırır ve CI işlem hatları gibi sistemlerin kullanabileceği trx veya xUnit XML raporları üretir. Azure DevOps, GitHub Actions ve Jenkins Doğrudan tüketilebilir. İlk ASP.NET projesi için MSTest'i kullanmak, araç zincirini basit tutar. Daha zengin parametreleme isteyen veya zaten ASP.NET Core kullanan ekipler, oluşturulduğu çerçeveyle tutarlılık sağlamak için genellikle xUnit'i tercih eder.

ASP.NET Uygulamaları için Birim Testinin En İyi Uygulamaları

Birkaç temel alışkanlığa bağlı kalmak, bir ASP.NET projesinin ömrü boyunca bir test paketinin hızlı, güvenilir ve kullanışlı kalmasını sağlar.

  1. Her yöntem için yalnızca bir davranışı test edin. Birbirinden bağımsız birçok şeyi doğrulayan bir test, birçok nedenden dolayı başarısız olur ve düzeltilmesi daha uzun sürer.
  2. Niyetten sonra testlere isim verin. MethodUnderTest_Scenario_ExpectedResult gibi bir kalıp, Test Gezgini'nin sınıfın okunabilir bir spesifikasyonunu çıktı olarak vermesini sağlar.
  3. Cihazı dış sistemlerden izole edin. Dosya, ağ ve veritabanı çağrılarını arayüzlerin arkasına sarın ve testin gerçek bağımlılığa ulaşmasını engellemek için sahte veya taklit nesneler kullanın.
  4. Testleri hızlı tutun. Tüm birim test paketinin saniyeler içinde tamamlanmasını hedefleyin. Yavaş testler atlanır ve atlanan testler hataları gizler.
  5. Düzenleme, Harekete Geçme, İddia Etme düzenini izleyin. Aralarında boş satırlar bulunan üç kısa blok, niyeti belirtir ve hatalı satırları kolayca fark etmeyi sağlar.
  6. Her commit işleminde testler çalıştırın. `dotnet test` komutunu bir CI işlem hattına entegre edin, böylece hatalı bir test, gönderimi değil, birleştirmeyi engellesin.ping üretime.
  7. Track kod kapsamına ulaşın, ancak bunun peşinden koşmayın. Kapsama alanı denenmemiş yolları öne çıkarıyor ancak yüksek sayı tek başına kaliteyi garanti etmiyor. RevEksik satırların aslında ne işe yaradığını görün.

Birlikte uygulandığında, yukarıda oluşturulan DemoTest projesi, her güncellemede hataları yakalayan, gelecekteki geliştiriciler için davranışları belgeleyen ve bir ASP.NET uygulamasını yeniden düzenlerken güven veren bir test paketinin temelini oluşturur.

SSS

Evet. GitHub Copilot, [TestClass] ve [TestMethod] bloklarını oluşturabilir, Arrange Act Assert düzenlerini önerebilir ve hedef metot imzasından parametreli [DataRow] durumları üretebilir. RevÜretimde kullanmadan önce oluşturulan doğrulama ifadelerini inceleyin.

Evet. Makine öğrenimine dayalı yardımcılar, kırılgan testleri işaretleyebilir, daha iyi isimler önerebilir ve [TestInitialize] içinde olması gereken yinelenen kurulumları vurgulayabilir. İnceleme süresini kısaltırlar, ancak her Assert'in doğruluğundan yine de geliştirici sorumludur.

Birim testi, tek bir sınıfı veya metodu izole eder ve bağımlılıklarını taklit eder. Entegrasyon testi ise genellikle gerçek bir veritabanına veya web sunucusuna erişerek birden fazla bileşeni birlikte çalıştırır. Birim testleri milisaniyeler içinde çalışır; entegrasyon testleri daha uzun sürer ancak bağlantı hatalarını yakalar.

Visual Studio Enterprise'da Test Analizi'ni kullanın. Code Tüm testler için kapsam. Diğer sürümlerde, Coverlet N'yi ekleyin.uGet Paketi açın ve `dotnet test –collect:”XPlat` komutunu çalıştırın. Code "Kapsam" üretmek Cobertura XML raporu.

Bağımlılığı bir arayüzün arkasına sarın ve yapıcı metot aracılığıyla enjekte edin. Testte, Moq veya NSubstitute gibi kütüphanelerle oluşturulmuş bir sahte nesne veya taklit nesne geçirin, böylece test edilen birim gerçek veritabanına veya HTTP uç noktasına asla dokunmaz.

Test projesini içeren klasörde `dotnet test` komutunu çalıştırın. Bu komut projeyi derler, her bir [TestMethod]'u bulur, çalıştırır ve bir özet yazdırır. GitHub Actions gibi CI sistemleri, iş akışı adımı içinde aynı komutu çağırır.

Metodu [DataTestMethod] ile işaretleyin ve giriş değerlerini ve beklenen sonucu sağlayan bir veya daha fazla [DataRow] özniteliği ekleyin. MSTest daha sonra aynı gövdeyi her satır için bir kez çalıştırarak, Test Gezgini'nde her durum için ayrı bir satır oluşturur.

Bir sonraki gerekli davranışı tanımlayan başarısız bir [TestMethod] yazın, testi geçecek kadar üretim kodu ekleyin ve ardından yeniden düzenleyin. Bu kırmızı-yeşil yeniden düzenleme döngüsünü tekrarlamak, tasarımın testler tarafından yönlendirilmesini sağlar, bunun tersi olmaz.

Bu yazıyı şu şekilde özetleyin: