Test Çeşitleri ve .Net Projelerine Unit Test Yazmak
  1. Anasayfa
  2. .NET

Test Çeşitleri ve .Net Projelerine Unit Test Yazmak

0

Merhaba, bugün sizlere test çeşitleri ve .Net projelerinde unit test yazma konuları hakkında bilgiler vereceğim. Çok fazla vakit kaybetmeden test çeşitlerini incelemeye başlayalım.

Unit Test

Unit Test bir programın en küçük test edilebilir parçalarının (genellikle fonksiyonlar veya metotlar) doğru çalışıp çalışmadığını kontrol etmek için kullanılan bir test türüdür. Geliştirme sürecinin erken aşamalarında hataları tespit etmeye, kodun yeniden kullanılabilirliğini ve bakımını kolaylaştırmaya yardımcı olur.
Yazılımın daha karmaşık bileşenleri ve sistemleri entegre edilmeden önce, temel yapı taşlarının sağlam olduğundan emin olunmasını sağlar.

Integration Test

Integration Test bir uygulamadaki komponent ya da modüllerin birbiri ile nasıl bir davranış sergilediğinin test edilmesidir. Amaç, bireysel modüllerin tek başına düzgün çalışmasının yanı sıra, entegrasyon sürecinden sonra bir sorun olup olmadığının test edilmesidir. Unit test ile farkı, unit testte tek bir modülün veya metodun testi yapılır fakat Integration test birden fazla modül veya sistemin etkileşimini test eder. Integration test daha yüksek seviye bir test türüdür. .net projelerinde NUnit ve MSTest, Integration test araçlarıdır.

End to End Test

End to End Test bir uygulamanın baştan sona nasıl davranış sergilediğinin test edilmesidir. Amaç, tüm sistemin entegre bir şekilde çalışıp çalışmadığını ve kullanıcıların uygulamayı beklenen şekilde kullanabildiğini doğrulamaktır.
Bir e-ticaret uygulaması üzerinde bir E2E test yapmak istiyorsanız aşağıdaki kullanıcı akışını test edebilirsiniz:
Kullanıcı giriş sayfasına gider.
Kullanıcı hesabına giriş yapar.
Ürünleri arar ve bir ürün seçer.
Sepete ekler ve ödeme işlemini tamamlar.
Sipariş özeti ekranında başarı mesajını görür.
Bu süreçte:
Kullanıcı arayüzünün (UI) düzgün çalışıp çalışmadığını,
Arka plandaki sistemlerin (API çağrıları, veri tabanı işlemleri) sorunsuz bir şekilde entegre olduğunu,
Kullanıcı deneyiminin kesintisiz olduğunu kontrol edersiniz.

UI Test

UI Test kullanıcı arayüzünün test edilmesidir, amaç kullanıcının temasta bulunduğu unsurların doğru çalışıp çalışmadığını test etmektir.

Resim-1

.net Projelerine Unit Test Yazmak

Test etmek istediğiniz uygulama herhangi bir Console App, Web App veya API uygulaması olabilir. Unit test yazabilmek için farklı Framework’ler bulunmaktadır. Bu makalede xUnit ile test yazmanın detaylarını inceleyeceğiz.

Test etmek istediğiniz projenin Solution’ında Add-> New Project kısmından Resim-2 ‘ deki gibi xUnit Test Project Template’ini seçerek test projenizi oluşturun. Bunu yaptığınızda test metotlarını yazacağınız test projeniz oluşmuş olacak.

Resim-2

Unit test yazmak temel olarak üç aşamadan oluşur.

  • Arrange: Test yazılacak metodun kullanacağı kaynaklar belirlenir, nesneler oluşturulur, değişkenler tanımlanır.
  • Act: Test edilecek metodun çalıştırıldığı kısımdır.
  • Assert: Test ettiğimiz metodun doğrulanması aşamasıdır. Metodun döndüğü Result ya da Exception doğrulanır.

Assert aşamasında bahsettiğimiz doğrulama işlemi için kontrol edebileceğimiz durumlar neler olabilir bunlara bakalım.
Assert.Equal(expected, actual), Assert.NotEqual(expected, actual): Beklenen ve gerçek değerlerin birbirine eşit olup olmadığını doğrular.
Assert.True(condition), Assert.False(condition): Belirtilen koşulun doğru veya yanlış olduğunu doğrular.
Assert.NotNull(object), Assert.Null(object): Nesnenin null olup olmadığını doğrular.
Assert.Same(expected, actual), Assert.NotSame(expected, actual): İki nesnenin aynı nesne olup olmadığını (aynı referansa sahip olduğunu) doğrular.
Assert.Empty(collection), Assert.NotEmpty(collection): Bir koleksiyonun boş olduğunu doğrular.
Assert.IsType<int>(result), Assert.IsNotType<string>(result): Bir nesnenin belirli bir tipe sahip olup olmadığını doğrular.
Assert.Throws<TException>(Action): Belirtilen işlem sırasında belirli bir türde bir istisna oluştuğunu doğrular.
Test edeceğimiz örnek bir Calculation sınıfı oluşturarak, içinde matematiksel işlemler için metotlar oluşturalım.

Resim-3

Daha sonra oluşturduğumuz test projesinin içinde bu metotları test edebileceğimiz CalculationTest metodunu oluşturalım. Bu test metodunda, projemizde yazmış olduğumuz metotların kurallarını test edecek tüm metotları yazabiliriz. Eğer projede birden çok sınıfınız varsa bütün sınıflar için ayrı test metodu oluşturmanız kod temizliği açısından daha uygun olacaktır.

CalculationTest sınıfının içine test etmek istediğimiz durumları ekleriz. Öncelikle test yazacağımız metodun aldığı değerleri ve bu değerlere göre sonuç olarak dönmesi gereken değeri bir değişken olarak tanımlarız. Act kısmında test ettiğimiz metoda bu değerleri veririz. Sum metodunun dönmesi gereken değerin, metottan dönen değere eşit olup olmadığını Assert.Equal metodunu kullanırız.  Bu Assert metotları, test etmek istediğiniz duruma göre değişkenlik gösterebilir. Yukarıda da bahsedilen Assert metotlarından ihtiyacınıza uygun olanı kullanmak testlerinizi doğrulamada yardımcı olacaktır.

Resim-4

Yazdığımız Divide metodunda farklı durumları test etmek istediğimiz için iki farklı test metodu oluşturduk.

Resim-5

Testlerin Çalıştırılması ve Debug Aşaması

Visual Studio Test Explorer ekranından Run ile test metotları çalıştırılır. Debug ile test metotları Debug edilerek, eğer test metodunuz hata alıyorsa hangi adımda hata alındığını görebilirsiniz. Testleriniz hata aldığı durumda Error Message kısmından hata detaylarını görebilirsiniz.

Resim-6

Moq Framework Nedir?

Mocklama, birim testleri yazarken dış bağımlılıkların veya nesnelerin taklit edilmesi işlemidir. Mesela gerçek bir veri tabanına bağlanmak yerine veri tabanı işlemleri taklit edilebilir. Bu taklit edilen nesnelere “Mock nesneler” denir. Mock’lama, bir nesnenin dış bağımlılıklarını kontrol altına almanıza, bu bağımlılıkların test sırasında belirli bir şekilde davranmasını sağlayarak testlerinizi daha öngörülebilir ve tekrarlanabilir hale getirir. Uygulamanızda Mock yapısını kullanmanız gerektiğinde aşağıdaki gibi Nuget Package Manager üzerinden Moq Framework’ünü indirmelisiniz. Biz de bu Framework’ü indirerek Mock’lama yapısına örnek olacak bir test metodu yazalım.

Resim-7

Mocking (Bağımlılıkları taklit Etmek)

Resim-8

Mocklama yapmak için iki önemli adım vardır.

  • Mock nesnesinin oluşturulması: var mock=new Mock<IBağımlılık>();
  • Davranışların tanımlanması: mock.Setup(x => x.Metod()).Returns(değer);

Test sırasında gerçek bağımlılığın yerine Mock nesnenin kullanılması ile ilgili örnek aşağıdaki şekilde olabilir. Bu örnek metotta veri tabanına yapılan ekleme işlemi ile ilgili Interface ve kullanılan Mapper Interface’i taklit edilmiştir yani Mock’lanmıştır.

Resim-9

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Test controller logic in ASP.NET Core | Microsoft Learn

Test Minimal API apps | Microsoft Learn

TAGs: .NetCore, Unit Test, unit testing, debug, framework, xUnit, tdd, software, test types, test nedir, ASP .NET Core, test türleri

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Konya Teknik Üniversitesi Bilgisayar Mühendisliği 3. sınıf öğrencisiyim.1. sınıfta okurken online olarak Web Geliştirme alanında bir Start-Up'ta gönüllü staj yaptım. 2. sınıfın yaz döneminde ise Akdeniz Üniversite'si Teknokent bünyesinde bulunan Mavi Arge şirketinde Mobil Uygulama Geliştirme alanında bir staj yaptım. Üniversite yıllarımı kendimi geliştirmek için değerlendiriyorum. Üniversitemizin Bilişim Topluluğunda görev alıyorum. Ayrıca Türkiye'nin Mühendis Kızları projesinde yer alıyorum.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir