Unit Test Kavramı ve Php Symfony Uygulaması

Seyit Erdemir
4 min readApr 13, 2023

--

Unit Test Kavramı : Unit test projelerimizde development ve deployment sonrasında olmasını istemediğimiz hatalarla karşılaşma riskini düşüren bir yapıdır. Unit test projelerimizde devamlılığı ve bütünlüğü sağlamaya da yardımcı olmaktadır.

Unit Test nedir?

Projelerimizde bulunan main fonksiyonlarımızı ya da daha küçük parçalar olan fonksiyonlarımızı test etmemizdir. Verdiğimiz parametrelerin ve fonksiyon sonunda aldığımız return değerlerinin istediğimiz sonuçları verip vermediğini kontrol etmekteyiz. Örnek vermek gerekirse projemizde bir fonksiyonumuz da telefon numarası formatlamaktayız parametre olarak bir integer değer almakte ve sonrasında gelen parametredeki boşlukları silerek return etmekte. Bu fonskiyona yazacağımız unit teste caselerimiz vereceğimiz parametrenin hane sayısını, type bilgisini, gönderilip gönderilmeyeceği gibi kontrollerini yaparak basit bir unit test yazmış bulunmaktayız. Daha kapsamlı bir örnek vermek gerekirse projemizde bir API servisinden response almaktayız. Gelen response parse edilmekte. Parse ettiğimiz fonksiyonumuza unit test yazabilmemiz için örnek responselara ihtiyacımız bulunuyor. Bu şekildeki unit testlerde response servisten gelmiş gibi davranılmakta ya da response benzeri mock bir data oluşturulmakta ve unit testte kullanılmakta. Çeşitli caseler sonucunda fonksiyonun istediğimiz gibi çalıştığına emin olabilmekteyiz. Servisin response üzerinde yapacağı değişiklikler sonrasın da unit testimizi güncellememiz gerekebilir.

Unit Testin faydaları nelerdir ?

Unit test çeşitli mimarilerle parelel olarak kullanılarak projenin gelişimini ve ilerleyişini hızlandırmakta. Geliştirme sürecine ayrılan vakit artıyor gibi görünsede sonrasındaki aşamalarda süreci büyük ölçüde azalttığını görmekteyiz.

Development öncesinde yazılan unit testlerde test aşamasında karşılaşılabilecek caseler düşünülerek bugsuz geliştirme yapma ihtimalini arttırmakta ve geliştiricinin bakış açısını arttırmaktadır.

Development sonrasında yazılan unit testlerde yazılan kodun kalitesini ve performansını arttırmak için kod üzerinde güncelleme yapılmasını sağlayabilir.

Geliştirdiğimiz projenin kapsamı arttıkca ve farklı geliştiricilerde projeye dahil olmaya başladıktan sonra unit test hayati önem taşımaktadır. Farklı geliştiricilerin farklı yerlerde yaptıkları farklı geliştirmeler proje üzerinde herhangi bir yerde sorun çıkarmakta ise proje genelinde çalışıcak olan unit testler bu hatayı tespit etmenizde ve fixlemenizde işlerinizi kolaylaştıracaktır.

Unit Test yazarken nelere dikkat edilmelidir?

Öncelikle unit testlerimizide geliştirmelerimizden ayrı tutmayarak aynı kod kalitesinde ve standartlarında yazmaya özen göstermeliyiz.

Testlerimizin kapsamlı olabilmesi adına geliştirme kapsamında karşımıza gelebilecek her türlü sonuca hazırlıklı olmalıyız. Farklı caseler üretmek adına ekip arkadaşlarımızdan destekler almalıyız.

Test caselerimizin anlaşılabilir olması adına yorum satırları kullanmalıyız. Böylelikle hata aldığımız testi güncellememiz kolaylaşacaktır. Bizden sonra farklı bir geliştirici de girdiğinde hakimiyeti artacaktır.

Daha öncesinde unit testi yazılmış bir geliştirme üzerinde geliştirme yapıldığında unit testi çalıştırmayı ve güncellemeyi unutmamalıyız. Testlerimizi yazarken kapsamlı düşünmeliyiz ve sadece test ettiğimiz caselerde çalışsın gibi düşünmek yerine daha kapsamlı yazarak farklı caselerde de doğru çalıştığından emin olmalıyız.

Php Symfony ile basit bir Unit Test yazalım

Yukarıda vermiş olduğum telefon numarası kontrolü yapan fonksiyonumuz için bir unit test yazalım.

Görsel-1

Görsel-1 de gelen parametredeki değerin 11. satırda boşluklarını silmekteyim. Sonrasında karakter sayısını kontrol ederek 11 haneden farklı bir sayıda ise false döndürmekteyim. Eğer 11 hane ise her her haneyi tek tek kontrol ederek her hanenin sayı olduğundan emin olmaktayım ve parametreyi döndürmekteyim. Burada kontrol edebileceğim caseler hane sayısı ve gelen parametre içersinde string değerlerin yer alması caseleri.

Görsel-2

Symfonyde Unit Test yazabilmeyi kolaylaştırmak için Phpunit paketini composer aracılığıyla kurmaktayım. Bu paket hakkında daha detaylı bilgi almak için symfonynin sitesini ziyaret edebilirsiniz. Yazmış olduğum fonksiyonumu test etmek için aynı isimde bir class oluşturuyorum. Sonra caselerimi belirliyorum ve oluşturuyorum. Test edebilmek için terminalimize “./vendor/bin/phpunit src/Tests/PhoneControllerTest.php” komutunu yazmamız gerekmekte.

Görsel-3

Komutu çalıştırdıktan sonra bütün caselerin doğru çalışması durumunda terminalimizde Görsel-3 de yer alan 1 ve 2. görsel gelebilir. Caselerden birinde hata alma durumunda ise Görsel-3 de yer alan 3. görsel gelecektir. Terminal üzerinde anlaşılır bir hata loguda olacağından kolayca update edebilirsiniz. Geliştirmekte olduğumuz projeler büyüdükçe farklı developerlar proje üzerinde çalışmaya başladıkça unit testin önemini anlıyoruz.

Buraya kadar okudugunuz için teşekkür ederim.Umarım işinize yarayan bi yazı olur. Verdiğim örnekteki kodlara ulaşmak için bana yazabilirsiniz.

Github : https://github.com/seyitErdemir
LinkedIn : https://www.linkedin.com/in/seyit-erdemir/

--

--