Tekrar Webkolog takipçileri! PHPUnit serimize tam gaz devam ediyoruz. Bir önceki yazımızda PHPUnit'i kurmuş ve ilk testimizi başarıyla geçirmiştik. Ama dürüst olalım; her şeyin yeşil yandığı bir dünya gerçekçi değil. Testlerin asıl amacı, biz hata yaptığımızda bizi kolumuzdan tutup "Hop, burada bir yanlış var!" demektir.
Bugün hem bilerek hata yapacağız hem de gerçekçi bir senaryo üzerinden testlerimizi derinleştireceğiz.
1. Bilerek Hata Yapıyoruz: Kodumuz Bozulursa Ne Olur?
Az önceki hesap makinesi örneğimizi hatırlayın. Diyelim ki dalgınlığımıza geldi ve toplama yapması gereken fonksiyonu yanlışlıkla değiştirdik.
Hatalı Kod (src/Calculator.php):
namespace App;
class Calculator { public function add($a, $b) { return $a - $b; // Dikkat! Toplama yerine yanlışlıkla çıkarma yapıyoruz. } }
Şimdi testimizi tekrar çalıştıralım:
./vendor/bin/phpunit tests
Ne Göreceğiz? PHPUnit bize kocaman bir "F" (Failure) verecektir. Çıktı muhtemelen şuna benzeyecektir:
Failed asserting that -1 matches expected 5.
Bu şu demek: "Ben 5 sonucunu bekliyordum ama kodun bana -1 döndürdü, git ve o hatayı düzelt!" İşte bu uyarı, canlıya hatalı kod göndermenizi engelleyen o muazzam güvenlik ağıdır. Hatayı düzeltip tekrar yeşil barı görmek ise tarif edilemez bir rahatlık!
2. Gerçek Bir Senaryo: E-posta Kontrolü (Validator)
Biraz daha gerçekçi bir iş mantığı kuralım. Projemizde kullanıcıların e-posta adreslerini kontrol eden bir Validator sınıfı olsun.
Kod (src/Validator.php):
namespace App;
class Validator { public function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } }
Şimdi bu sınıfı farklı durumlar için test edelim. Sadece geçerli olanı değil, geçersiz olanları da denetlemeliyiz.
Test (tests/ValidatorTest.php):
use PHPUnit\Framework\TestCase; use App\Validator;
class ValidatorTest extends TestCase { public function testEmailValidation() { $validator = new Validator();
// assertTrue: Sonucun true olmasını bekler
$this->assertTrue($validator->isValidEmail('[email protected]'));
// assertFalse: Sonucun false olmasını bekler
$this->assertFalse($validator->isValidEmail('gecersiz-email-adresi'));
$this->assertFalse($validator->isValidEmail('user@domain')); // Eksik uzantı durumu
}
}
3. PHPUnit Yapılandırması (phpunit.xml)
Sürekli terminale ./vendor/bin/phpunit tests yazmak bir süre sonra can sıkıcı olabilir. PHPUnit'e ayarlarımızı bir dosya ile söyleyebiliriz. Projenin ana dizinine phpunit.xml isimli bir dosya oluşturalım:
<?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true"> <testsuites> <testsuite name="My Project Tests"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
Bu dosya neyi değiştirir?
- colors="true": Terminal çıktılarını renkli yapar. Başarılar yeşil, hatalar kırmızı görünür.
- directory: PHPUnit'e testlerin nerede olduğunu baştan söyler.
Artık terminale sadece şunu yazmanız yeterli, o ne yapacağını bilir:
vendor/bin/phpunit
Gördüğünüz gibi, test yazmak sadece kodun çalıştığını kanıtlamak değil, aynı zamanda gelecekteki hatalara karşı bir kalkan oluşturmaktır. Bir sonraki yazımızda daha karmaşık yapılara dalacağız!
Webkolog'u takipte kalın!
Hepinize hatasız ve keyifli kodlama deneyimleri dilerim!
Hiç yorum yok:
Yorum Gönder