Kısaca PHPUnit

Hatice Ergün
Kodcular
Published in
3 min readJun 19, 2018

--

Test Türleri

Bir yazılım sürecinde testler; birim test -> entegrasyon testi -> sistem testi -> kullanıcı kabul testi olarak aşamalar halinde yapılır.

Tüm test türlerini anlattığım yazıya ulaşmak isterseniz buraya tıklayın.

Bu yazıda birim testinden bahsedeceğim.

TDD

Birim test yazmak için TDD kavramına bakmamız gerekiyor. TDD felsefesine göre önce test yazılır daha sonra kod yazılır. Bu yaklaşımı benimseyebilmek için tüm süreç planlanmalıdır. Projenin ne olduğuna ve ne yapacağına hakim olmak gerekir. Bunun için önce döküman yazılmalıdır. Projenin dökümanı oluşturulduktan sonra teste başlanır. Testi yazılan birim çalıştırıldığında önce hata alınır. Çünkü testin aslında test ettiği birim ortada yoktur ve hata mesajı bizi karşılar. Hatalar kırmızı renk ile gösterilir. Daha sonra teste göre kodun kendisi yazılır ve test edilen birim de oluşturulduğu için artık testin doğru çalışması beklenir ve konsol bize yeşil ile onay mesajını verilir. Bu süreç bir döngü olarak devam eder ve proje bu şekilde ilerler.
Testi yaz kırmızıyı gör sonra kodu yaz yeşili gör ve bunu sürekli tekrarla.

PHPUnit

PHPUnit, PHP’nin birim test frameworküdür. Birim, sizin projenizin en küçük yapısına denir. Projeye göre, en küçük yapı; fonksiyon, metod, sınıf veya bir uygulama olabilir. Amaç, projeyi olabilecek en küçük birimlere ayırmak, bağımlılıklardan kurtarmak ve test etmek. Her birim doğru çalışıyorsa tüm proje doğru çalışıyor demektir, denir.

Biz testleri yazmak için PHPUnit kullanacağız. TDD yaklaşımına göre, önce testi yazacağız ardından kodu yazacağız.

Kurallar

Bazı temel kavramlardan bahsedelim. Test yazmanın bazı kuralları vardır. Bu kurallardan bahsedeceğim.
1) Testlerimiz için projemizde tests adında bir dizin oluşturmalayız.
2) Oluşturduğumuz her test dosyasını isimlendirirken, StudlyCaps kullanmalıyız (Örn. SinifadiTest.php).
3) Test sınıflarını PHPUnit_Framework_TestCase sınıfından türetmeliyiz.
4) Test metodları public olmalıdır.
5) Test sınıfları test kelimesi ile bitmeli, test metodları ise test kelimesi ile başlamalıdır.

Assertions

PHPUnit içinde kontrol yapmak için assertions onaylama ifadelerini kullanırız. Biz assertion yaparak ortaya bir iddia atıyoruz ve doğru olup olmadığını kontrol ediyoruz. Birçok Assertions var. Ben en sık kullanılan birkaç tanesine örnek vereceğim.
assertTrue : Gelen değerin doğru olup olmadığını denetler.
assertEquals : Dönen değerin beklediğimiz sonuç olup olmadığını denetler.
assertNotEquals : Verilen iki değerin birbirine eşitsizliğini denetler.
assertArrayHasKey, assertCount, assertJson … Tüm assertion listesi ve kullanım örnekleri için buraya bakabilirsiniz.

Örnek

PHPUnit kurulumu yaptıktan sonra yerel sunucuda bir proje oluşturalım. İçine src ve tests klasörlerini ekleyelim. Daha sonra ana dizinde phpunit.xml dosyasını oluşturalım. Bu dosyaya PHPUnit yapılandırması hakkındaki bilgiler yazılır. Zorunlu değildir.

Murat Çileli’nin PHPUnit anlatımında gördüğüm bu örneği ele alacağım. KDV hesaplama. Projemiz KDV hesaplaması yapan basit bir uygulama olacak. Bunun için önce testi yazıyorum.

Şimdi tests dizininde KDVHesaplaTest.php adında bir dosya oluşturalım ve içine aşağıdaki kodu yazalım.

<?phpclass KDVHesaplaTest extends PHPUnit_Framework_TestCase{
public function testKDVSonucuDogruMu(){
$kdv = new KDV_Hesapla(50);
$this->assertEquals(59, $kdv->kdv_dahil_tutar());
}
}
?>

Şimdi konsol üzerinden proje dizininde,
phpunit KDVHesaplaTest.php komutunu çalıştıralım.

Konsol ekranında hata mesajı aldık. Çünkü test ettiğimiz sınıf henüz yok.
src dizinin içinde, KDVHesapla.php dosyası oluşturup kodlarımızı yazalım.

<?phpclass KDV_Hesapla{
private $tutar;
public $kdv_dahil_tutar;
public function __construct($tutar){
$this->tutar = $tutar;
}
public function kdv_hesapla(){
return $this->kdv_dahil_tutar = $this->tutar * 1.18;
}
}
?>

Burada testimizin içine require_once ile dosyamızı dahil edelim. KDVHesaplaTest.php dosyamızın güncel hali;

<?phprequire_once("KDVHesapla.php");class KDVHesaplaTest extends PHPUnit_Framework_TestCase{
public function testKDVSonucuDogruMu(){
$kdv = new KDV_Hesapla(50);
$this->assertEquals(59, $kdv->kdv_dahil_tutar());
}
}
?>

Şimdi konsol ekranından tekrar testimizi çalıştıralım. Testimizin yeşil renk ile bize onay mesajı verdiğini göreceğiz.

All code is guilty until proven innocent.

İyi çalışmalar.

Kaynakça

https://phpunit.readthedocs.io/en/7.1/
https://gist.github.com/loonies/1255249
https://www.slideshare.net/mustafaileri/php-unit-ve-tdd
https://www.youtube.com/watch?v=k9ak_rv9X0Y&list=PLfdtiltiRHWGXSggf05W-pJbD47-_d8bJ
http://ozguradem.net/php/2016/05/25/test-yolculugu-php-phpunit-mockery/

--

--