Asp .Net Core Test Örneği

Merhaba arkadaşlar, bugün sizlerle beraber test konusundan bahsederek ufak bir test örneği hazırlayacağız.


Senaryomuz şu şekilde olacak;

Api endpointinden dönen sonucu test edeceğimiz bir integration test ve endpointin kullandığı servisin içerisinde ki kod bloğunu test edeceğimiz bir unit test olacak.

Farklı bir çok kütüphane bulunsa da biz bu test uygulamasında xUnit ve Moq kütüphanelerinden yararlanacağız.

Öncelikle neden test yazmalıyız konusuna biraz değinmek istiyorum. İlk başta en basit haliyle hafta sonumuzu rahat geçirmek ya da , gece rahat uyumak istiyorsak acaba hangi kod nereden patlayacak diye düşünmek istemiyorsak test yazmalıyız.

Production ortamında stabil çalışan koda müdahaleden korkmamak için test yazmalı, hatta testlerimizi pipelinımıza bağlayarak test coverage kontrolleri yapmalıyız. (Hatta TDD yaklaşımını kullanırsanız çok daha rahat uyuyabilirsiniz. 😀)

Lemi Orhan hocanın testle alakalı güzel bir hikayesini dinlemiştim.
İzlemek isteyenler buyrun => https://www.youtube.com/watch?v=VaeGtoH4dhU#t=1558

Testlerin sağladığı bir kaç avantajdan bahsetmek istiyorum.

  • Test yazıyorsanız eğer belli kod standartlarını takip ederek ufak kod parçacıkları oluşturursunuz. Bu hem kodun daha rahat okunmasını hem daha kolay geliştirilebilmesini sağlar.
  • Eğer bir işin/kodun testini yazabiliyorsanız o kodu yada işi iyi anlamış olmanız gerekir.
  • Testlerde süreklilik yakalarsanız, beklenmedik hataları minimuma indirebilirsiniz.
  • Testi olan kodun üzerine geliştirme yada refactoring yapmak çok daha kolaydır.Şimdi geçelim örneğimize;

Api Projemiz

Öncelikle Name Api’ mizi oluşturalım. Ve içerisinde Services adlı bir klasör oluşturarak INameService ve NameService classlarımızı ekleyelim.

Startup içerisinde Name Servisimizi register ederek Name Controller içerisinde kullanmak için Constructor injection yapalım.

Alive metoudu api ilk ayağa kaltığında çalışacak. LaunchSettings.json yada startuptan ayarlanabilir.

Get metodu name parametresini Name Servis içerisinde ki isValideName metoduna göndererek eğer servisten True dönerse 200 status kodunu , False dönerse 400 kodunu dönecek.

Apimizin yapısını basitçe tanımladık. Burada gerçek uygulamalarda NameService içerisinde ki isValidName metodu databaseye gidebilir.

Bu yüzden endpoint testimizi yazarken bu servisi mocklayarak databaseye ekstra bir yük bindirmemesini ve uygulamamızın performansını etkilememesini sağlayacağız.

Test Projemiz

NameApi.Test ismiyle xUnit kullanan bir test projesi oluşturduk. Services ve Endpoint klasörlerimizi ekledik. Şimdi geldik test yazmaya.

Öncelikle NameServisimize ait isValidName metodunun unit testini yazalım. Burada test metodumun başına “[Fact]” attributunu koymayı unutmuyorum.İsimlendirmeyi de olabildiğince açık ve anlaşılır bir şekilde yazmaya çalışıyorum. Assert kısmında ise beklediğim sonucu yazıyorum.

Endpoint Kısmına gelerek NameController testimi yazıyorum.

tanımlaması ile NameServisin bir mock objesi olacağını söyleyerek controller üretilirken bu servisin mock objesini yolluyorum.

Ayrıca bu mock servisimin ayarlarını yapacağım teste göre Setup kısmında ayarlıyorum.

Bunu biraz türkçeleştirmeye çalışırsam “Name Serviste yer alan isValidName metoduna herhangi bir string parametre geldiğinde true sonucunu döndür.” anlamı çıkar.

Testime göre mock servisimin ayarlarını yaparak , Assertlerim de beklentilerimi yazarak testlerimi çalıştırıyorum. Burada cli kullanmıyorsanız, Visual Studionun Test/Test Explorer aracından yararlanabilirsiniz.

Kaynak Kod => https://github.com/EnesAys/NetCoreTest

Umarım faydalı olmuştur, Kalın sağlıcakla 😀

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir