Unittest(Birim Testi) Nedir?

Ahmet Aslan
4 min readApr 17, 2017

--

Merhaba arkadaşlar bu yazımda Unittest(Birim Test)’in ne olduğunu anlatacağım.

Arkadaşlar öncelikle Unittest(Birim Test) adından da anlaşıldığı üzere yazılımın en küçük parçacığının test edildiği bir test yöntemidir. Tabiiki de bu yöntemi sağlıklı bir şekilde kullanabilmemiz için projemizde kurduğumuz mimarinin OOP(Objeye yönelimli programlama)’ya uygun olması gerekiyor.

Bu yazımda OOP(Objeye yönelimli programlama)’yı anlatmıştım eğer fikir sahibi değilseniz önce bu yazıyı okumanızı öneriyorum.

Şimdi arkadaşlar maddenin en küçük yapı taşına atom deniliyor. Testinde en küçük yapı taşı Unittest(Birim Testi)’dir.

Unittest(Birim Testi)’de yazdığımız fonksiyonların istediğimiz işi yapıp yapmadığını kontrol ederiz. Örneğin bir fonksiyon yazdım verilen sayıları toplayıp geri döndürüyor .

Bu fonksiyona number1 = 2 number2 = 2 şeklinde parametreler gönderip geriye 4 döndürüp döndürmediğini kontrol etmemiz gerekiyor kısacası.

Neden Unittest(Birim Testi) Yaparız?

Öncelikle şunu belirtmek istiyorum Unittest(Birim Testi) Gerçek bir kullanıcı testi değildir. Yani Unittest(Birim Testi)’ler’in sorunsuz çalışması sizin uygulamanızı kullanıcıların sorunsuz bir şekilde kullanması demek değildir. Unittest(Birim Testi) bug bulmaz çünkü Unittest(Birim Testi)’nin görevi yazılımın küçük parçacıklarını ayrı ayrı test etmektir. Örneğin projenizde 100 tane fonksiyon var tüm fonksiyonlar için Unittest(Birim Testi) yazdınız ve hepsi sorunsuz çalışıyor ama bu 100 tane fonksiyonu çeşitli yerlerde birbiri ile birlikte kullanıdığınızda sorun olabilir. Bunların tek başına sorunsuz çalışması birleştiğinde de sorunsuz çalışacağı anlamına gelmiyor. Bug bulmak için İşlevsel test (functional testing), bütünleştirme testi (integration testing) tarzı testler yapmamız gerekiyor bunlarıda ilerleyen yazılarımda yazıp buraya ekliyor olacağım.

Unittest(Birim Testi) yazmak kodda Refactor(Yeniden düzenleme) işlemini yapmayı kolaylaştırır. Kodda gözümüz kapalı değişiklik yapıp Unittest(Birim Testi) çalıştırıp istediğimiz algoritmaya uygun bir şekilde çalışıp çalışmadığını kolaylıkla test edebiliriz.

Unittest(Birim Testi)’lerini istediğimiz süre aralığında çalıştırarak bize rapor sunmasını sağlayabiliriz böylelikle fonksiyonlarımızın düzgün çalışıp çalışmadığını belli bir zaman aralığında kontrol edebiliriz

Unittest(Birim Testi) yazmak bizi daha düzgün kod yazmaya teşfik eder çünkü Unittest(Birim Testi) yazmak için OOP kurallarına uygun şekilde kod yazmamız gerekiyor buda spagetti kod yazmamızı engelliyor.

Unittest(Birim Testi)’ni yazdığımız fonksiyondan önce yazdığımız için daha işin başındayken mimariyi çok iyi kurarız ve ortaya daha temiz bir kod çıkar. İşte bunun için test odaklı yazılım(test driven development) yapıyor isek daha işin başındayken yazılım bileşenlerini birbirine sıkı sıkıya bağlamaktan kaçınırız ve ortaya daha kaliteli bir kod çıkar.

Nasıl Unittest(Birim Testi) Yazarız?

Öncelikle yazdığımız fonksiyonları bağımlılıklarından arındırmamız gerekiyor. Örneğin bir fonksiyon yazdık ve bir hava durumu servisinden günlük hava durumunu çekiyor. Bu fonksiyon için Unittest(Birim Testi) yazdığımız zaman bu fonksiyonun çektiği veriyi hava durumu servisinden çekmemesi gerekiyor çünkü biz kendi yazdığımız fonksiyonu test ediyoruz yukarıdada belirttiğim gibi eğer Unittest(Birim Testi) içerisinde veriyi hava durumu servisinden çeker isek hava durumu servisinin bizim testimizi etkilemesi olası olur. Peki bu durumda ne yapmamız gerekiyor sonuçta bir fonksiyon var ve hava durumu servisinden veri çekiyor o veriye göre işlem yapıyor. Bu durumda devreye mocking(taklit) dediğimiz yöntem giriyor.Örneğin hava durumu bize şu şekilde bir obje döndürüyor.

Biz Unittest(Birim Testi) içerisinde bu tarz bir servisin aynısını lokal ortamımızda oluşturup her seferinde sorunsuz verinin gelmesini sağlayıp veriyi taklit ederek kendimize yalandan bir hava durumu verisi oluşturup fonksiyonumuzu test etmiş oluruz.

Test kodlarını yazarken baştan savma yazmayın nasıl üzerinde çalıştığınız projedeki kodları özenerek yazıyorsanız test kodlarınıda özenerek yazın şunu unutmayın test te yazılımın bir parçasıdır. Mahalle maçlarında ki gibi kaleye en zayıf oyuncuyu alırsanız işin başında kaybettiniz demektir. Unutmayın Test yazılımın kalesidir.

Test isimlerini düzgün verin nasıl bir fonksiyonu yaptığı işi açıklayıcı bir şekilde isimlendiriyorsanız test fonksiyonlarını da o şekilde anlayabileceğiniz şekilde isimlendirin. Uzun isim vermekten kaçınmayın.

Tek bir şeyi test ettiğinizden emin olun unutmayın Biz Unittest(Birim Testi) testi yazıyorsunuz yazdığınız fonksiyonları bölebildiğiniz kadar bölün. Unutmayın bir test içerisinden birden fazla assert ifadesi kullanıyorsanız yanlış yoldasınız demektir hemen geri dönün.

Yazdığınız testler birbirini kesinlikle etkilemesin. Örneğin test_1 çalışmadan test_2 çalışmamalı tarzında bir algoritma kurmayın veya önce test_1 çalışacak sonra test_2 çalışacak tarzında da bir algoritma kurmayın tüm testler birbirinden bağımsız bir şekilde çalışabilmeli.

Yukarıda örnek bir kullanım görüyorsunuz. Burada belirttiğim gibi 2 sayıyı toplayan bir fonksiyon yazılmış ve bu fonksiyonu test eden bir fonksiyon yazılmış.

Python ile Unittest(Birim Testi)’ne ufaktan bir başlangıç yapmak istiyorsanız https://docs.python.org/2/library/unittest.html buradan daha detaylı bilgiye uğlaşabilirsiniz.

--

--