Dubluve.net » netbeans php unit testing http://www.dubluve.net Biz de yazılımcıyız Sun, 31 Aug 2014 13:17:32 +0000 tr-TR hourly 1 http://wordpress.org/?v=3.9.1 PHP Unit testing #1 http://www.dubluve.net/2011/11/11/php-unit-testing-1/ http://www.dubluve.net/2011/11/11/php-unit-testing-1/#comments Fri, 11 Nov 2011 19:57:38 +0000 http://dubluve.net/?p=354

1.     Php Unit Testing Neden Kullanılır ?

 

Yazdığımız Programın yada fonksiyonun her zaman düzgün çalışıp çalışmadığına nasıl emin olabiliriz ?

 

Örneğin Müşteri numarasını parametre olarak alan MüşteriGetir isimli bir fonksiyonumuz var. Burda örnekler çoğaltılabilir, örneğin bir sql cümlesini çağıran fonksiyon yada telefon numarasını düzgün girilip girilmediğini kontrol eden bir fonksiyon, ne yaptığı çok önemli değil)

 

Alışıldık programlamada fonksiyon geliştirilirken bir kaç test sonucunda fonksiyonun müşteri numarası verildiğinde doğru bilgileri çevirdiği kontrol edildikten sonra diğer fonksiyonlara geçilir. Yine alışıldık olarak fonksiyonun ilerde de doğru çalışacağı varsayılır.

 

Uygulama üzerinde zaman içerisinde değişiklikler yapılmaya devam edildikçe hava durumu kasvetli bir sonbahar’a dönüşmeye başlar, çünkü herhangi bir yerde yapılan en ufak bir değişikliğin neye mal olacağı belirsizdir.

 

Örneğin MusteriGetir fonksiyonun kullandığı ExecuteSql metodunda text alanlardaki ‘ karakterlerini sql sunucu yanlış anladığı için ” şekline çevirmeye kalktığınızda MusteriGetir fonksiyonunun zaten ” şeklinde gönderdiğini fark edersiniz ancak diğer fonksiyonlarında bu şekilde çalıştığından emin olamazsınız. Ve günler geçtikçe uygulamada yapılan yama adetleri ve mesai saatleri artmaya başlar.

 

Bu tür baş ağrılarından kurtulmanın en iyi yolu Unit Test metodlarını kullanmaktır.

 

Unit test yaparken temel amaç yazdığınız kodun her satırının başka bir kod tarafından otomatik olarak test edilmesidir. Burdaki “test” kullanıcı testi değil, MusteriGetir fonksiyonunun düzgün çalıştığının test’idir.

 

Her test diğer testlerden bağımsız olarak çalışmalı ve tüm bu testlerin tek bir sonucu olmalıdır yani TRUE yada FALSE. Unit test kodları içerisinde görsel doğrulama (ekrana bir şey yazma, mesaj gösterme v.s.) gibi işlemler yapmazsınız.

 

 

UnitTest kodları yanlızca çalışması beklenen durumlar için değil metodun verdiği hataları da test eder. Yani müşteri numarasını – değerde verdiğinizde fonksiyonun hata veriyor olmasını beklersiniz. UnitTest ile pratikde çıkan sorun genelde işler acil olduğu için bu test kodları sonraya bırakılır. bunu yapmayın! İşiniz ne kadar acil olursa olsun test kodlarını yazmadığınız her metod ileride harcadığınız zamanı tekrar tekrar uzatacaktır.

2.     Php Unit Kurulumu ve IDE’ler ile Çalışma (Netbeans üzerinde)

Php Unit’in en güzel tarafı IDE’ler ile entegreli çalışıyor olabilmesi.Böylece IDE üzerinde tarayıcıda açmadan (isterseniz) derleyip,ilgili metodları test edebiliriz.Şimdi Php Unit ‘in kurulumuna geçiyoruz:

  • Öncelikle şunu belirtmekte fayda var,Php Unit,en az Php 5.2.7 sürümü ve üstü sürümlerinde stabil olarak çalışmaktadır. Link
  • Windowsta Başlat’a cmd yazarak MS-DOS’u açınız ve aşağıdaki kodu giriniz:

 

pear config-set auto_discover 1

pear install pear.phpunit.de/PHPUnit

 

 


 pear channel –discover pear.phpunit.de

Bu işlemden sonra Channel eklememiz gerekmekte.Bu işlemi aşağıdaki gibi gerçekleştiriyoruz: 

 

Bu işlemde sonlandıktan sonra Server dosyalarınızın içine (Benimki WAMPP) aşağıdaki gibi bir klasör yolu oluşmuş olması gerekiyor:

C:/wampp/php/Php 5.2.11/PEAR/PhpUnit

Bu klasör oluşmuş ise CHMOD ayarlarından 755 yapmamız gerekiyor.

3.     Php Unit’i NETBEANS üzerinde Tanıtma

Öncelikle Netbeans üzerinden bir Sınıf oluşturuyoruz.Aşağıda Örnek olarak ekliyeceğim:

 

NETBEANS üzerinde PhpUnit tanımlamak için aşağıdaki işlemleri yapıyoruz:

  • Netbeans üzerinde Tools menüsü altında yer alan Options sekmesine tıklıyoruz.
  • Gelen sayfada,PHP sekmesine geçerek, yoksa Php’nin bulunduğu dizini tanıtıyoruz.

Bendeki Path (C:\wamp\bin\php\php5.2.11\php.exe)

  • Daha sonra PHP sekmesinin hemen yanında yer alan Unit Testing kısmına tıklıyoruz.Bu alanda kurmuş olduğunuz Php Unit test için kullanıcağımız phpunit.bat dosyasını tanıtacağız.Tüm işlemler .bat dosyasında derleniyor.
  • Bendeki Php Unit bat dosyası şu dizin içerisinde yer almaktadır: C:\wamp\bin\php\php5.2.11\phpunit.bat
  • Bu bilgiyide o Alana ekledikten sonra Tamam diyerek ,netbeans’ımizi yeniden başlatıyoruz.
PhpUnit ile Metod Test Etme

Öncelikle temel olarak Netbeans üzerinden bir Php Class oluşturuyoruz.Ve içine şu metodu ekliyoruz : (Bu örnek amaçlıdır,projeye ve isteğe göre test ediceğiniz metodu siz belirleyeceksiniz )

İsim teyit etmek istiyoruz.Php Unit class’ı ile bu oluşturduğumuz kendi sınıfımız içerisinde yer alan metoddan return edilen değer karşılaştırılacak.Bu örneği ve işlevi daha iyi anlatacağını düşünüyorum.

public function getName() {

return “Mustafa”;
}

 


1.Sınıf içerisindeki Metodu Netbeans Üzerinde Test Etme

Sınıfınızın oluşturulduğunu varsayarak,şimdi bu sınıfı PHP UNIT ile otomatik olarak test edeceğiz.Bu netbeans üzerinde bir tıklama kombinasyonundan oluşuyor.Oldukça basit.Php Unit dizinini vs otomatik olarak kendi include ediyor.

PhpClass.php (“bu oluşturduğum deneme sınıfı,siz kendi sınıfınızı test ediceksiniz.) sağ tıklayarak “TOOLS” -> “CREATE PHP UNIT” test diyoruz.

Gelen ekranda Php Unit test sınıfını oluşturacağı dizini seçiyoruz.Oraya kendi çalıştığınız dizini yada PHPUNIT kendi dizinini ekliyoruz.

 

Netbeans’ın oluşturduğu Test Sınıfımızda , testgetName metodu dikkatinizi çekecektir.(Sizin metodun adı her ne ise )

Bu alanda ilgili metodumuzu bazı parametreler ile test ediyoruz.Örneğin sınıfımızda hatırlarsak getName metodundan return “Mustafa” diyerek string bir değer döndürdük.Bu sınıftada o metoda string bir ifade göndericez fakat farklı bir değer olucak.Yani hata verdiğini göreceğiz.

public function testgetName() {

$this->assertEquals(“Deneme”,$this->object->getName());

}


Yukarıdaki temel örnekte assertEquals metodu ile ,getName metoduna,”Deneme” string ifadesini gönderdik.Yani o metoddan Deneme değeri dönüyor olması gerektiğini söyledik. Test ettiğimizde hata vermesi gerekiyor.Test işlemi şu şekilde yapılıyor:

PhpClass.php dosyasının üzerinde CTRL+F2 bastığımızda,Unit Testing başlıycak ve sonucu gösterecektir.

Başka bir yazıda da unit testing in önemi hakkında daha detaylı yazmak istiyorum.

]]>
http://www.dubluve.net/2011/11/11/php-unit-testing-1/feed/ 0