PHPUnit Nedir?
PHPUnit, PHP uygulamaları için geliştirilen bir birim test framework’üdür. Birim testleri, yazılım geliştirme sürecinde yazılan kodun işlevlerinin doğru çalışıp çalışmadığını kontrol etmek amacıyla bağımsız olarak test edilen en küçük kod birimlerini ifade eder. PHPUnit, bu testlerin yazımını kolaylaştırır ve otomatikleştirir, bu sayede geliştiriciler kodlarını daha güvenilir şekilde test edebilir.
Kurulum
PHPUnit’i kurmak için Composer kullanılabilir. Composer, PHP için bir bağımlılık yöneticisidir. İlk olarak Composer’ın sistemde kurulu olduğundan emin olunmalıdır. Daha sonra, projenin kök dizininde aşağıdaki komut çalıştırılarak PHPUnit kurulumu gerçekleştirilir:
“`
composer require –dev phpunit/phpunit
“`
Bu komut, PHPUnit’i proje bağımlılıkları arasına ekler. Kurulum tamamlandığında, proje dizininde “vendor/bin/phpunit” yoluyla PHPUnit çalıştırılabilir.
Test Sınıfı Oluşturma
Birim testleri yazmak için öncelikle test sınıfı oluşturulmalıdır. Test sınıfı, PHPUnit kütüphanesine dayalı olarak bir veya daha fazla test metodu içerir. Test sınıfı genellikle `PHPUnit\Framework\TestCase` sınıfından türetilir. Aşağıdaki örnek, basit bir matematik sınıfı ve bu sınıfa ait birim testlerinin nasıl yazılacağını göstermektedir.
“`php
// Math.php
class Math {
public function add($a, $b) {
return $a + $b;
}
}
“`
“`php
// MathTest.php
use PHPUnit\Framework\TestCase;
class MathTest extends TestCase {
public function testAdd() {
$math = new Math();
$this->assertEquals(4, $math->add(2, 2));
$this->assertEquals(0, $math->add(-1, 1));
}
}
“`
Yukarıdaki örnekte, `Math` sınıfı iki sayının toplamını döndüren `add` metodunu içerir. `MathTest` adı verilen test sınıfı ise bu metodu test eden birim testlerini barındırır. `testAdd` metodu, `assertEquals` yöntemi ile beklenen sonuçların kontrolünü sağlar.
Testlerin Çalıştırılması
Testlerin çalıştırılması için, terminalden PHPUnit komutları kullanılabilir. Aşağıdaki komut, belirtilen test dosyasını çalıştırır:
“`
vendor/bin/phpunit MathTest.php
“`
Testlerin başarılı veya başarısız olduğu bilgisi konsolda görüntülenecektir. PHPUnit, başarılı olan testleri yeşil, başarısız olanları ise kırmızı renkte göstererek, hızlı bir görsel geri bildirim sağlar.
Test Senaryolarının Geliştirilmesi
PHPUnit, daha karmaşık test senaryolarını yönetmek için çeşitli yöntemler ve özellikler sunar. `setUp` ve `tearDown` metotları ile her test öncesi veya sonrası yapılması gereken işlemler tanımlanabilir. Örneğin, belirli bir ortamı hazırlamak veya oluşturulan nesneleri temizlemek için bu metotlar kullanılabilir.
“`php
protected function setUp(): void {
$this->math = new Math();
}
protected function tearDown(): void {
unset($this->math);
}
“`
Veri Sağlama ile Test Yazma
PHPUnit, veri sağlayıcı (data provider) kullanarak aynı test metodu üzerinden birden fazla koşulun test edilmesine olanak tanır. Aşağıdaki örnek, aynı `add` metodunu farklı girişlerle test etmek için veri sağlayıcı kullanımını göstermektedir.
“`php
/
@dataProvider additionProvider
/
public function testAdd($a, $b, $expected) {
$this->assertEquals($expected, $this->math->add($a, $b));
}
public function additionProvider() {
return [
[1, 1, 2],
[2, 2, 4],
[-1, 1, 0],
[-1, -1, -2],
];
}
“`
Mocking
Mocking, nesnelerin yerine geçici “mock” nesneler oluşturarak testlerin izole edilmesine olanak tanır. PHPUnit, bağımlılıkları taklit etmek için `createMock` yöntemini sunar.
“`php
$mock = $this->createMock(SomeClass::class);
$mock->method(‘someMethod’)->willReturn(‘mocked value’);
“`
Mocking, bir test sırasında dış bağımlılıkların etkisini azaltarak, testin güvenilirliğini artırır.
Test Koşulları ve Beklentiler
Test yazarken, çeşitli koşullar için beklenen çıktı ile karşılaştırmalar yapılmalıdır. PHPUnit, farklı asserter metodları sunarak sonuçların beklentilerle karşılaştırılmasını sağlar. `assertTrue`, `assertFalse`, `assertCount`, gibi çeşitli asserterler kullanılarak farklı durumlar kontrol edilebilir.
Sonuç
PHPUnit, PHP 7.4 ile birim testleri yazmanın ve yönetmenin etkili bir yolunu sunar. Test odaklı geliştirmenin sağladığı avantajlar, yazılım kalitesini artırırken, bakım ve geliştirme süreçlerini kolaylaştırır. PHPUnit, testlerin yazımını ve sürdürülmesini kolaylaştıran çeşitli araçlar ve yöntemler sağlar. Bu, yazılım projelerinde güvenilirliğin ve kalitenin artırılması açısından önemli bir rol oynar.