Web Doktoru - Laravel’de Test Driven Development (TDD) ve Test Yazımı
Laravel, modern web uygulamaları geliştirirken test yazmayı kolaylaştıran güçlü bir test altyapısı sunar. Test Driven Development (TDD) yaklaşımı, kod yazmadan önce testler oluşturarak uygulamanızın güvenilir ve sürdürülebilir olmasını sağlar. Bu makalede, Laravel’de TDD sürecini, unit testleri, feature testleri ve bu testlerin nasıl yazılacağını detaylı bir şekilde inceleyeceğiz.
Test Driven Development (TDD), yazılım geliştirme sürecinde testlerin öncelikli olarak yazıldığı bir yaklaşımdır. Bu yaklaşım, kod yazmadan önce testlerin oluşturulmasını ve bu testleri geçecek şekilde kodun geliştirilmesini önerir.
Laravel, test yazmak için PHPUnit ve kendi test yardımcılarını kullanır. Testler, tests
klasörü altında bulunur ve iki ana kategoriye ayrılır:
Testleri çalıştırmak için aşağıdaki komutu kullanabilirsiniz:
php artisan test
Testleri izole etmek için, testler sırasında ayrı bir veritabanı kullanabilirsiniz. Bunun için phpunit.xml
dosyasında aşağıdaki değişikliği yapabilirsiniz:
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Run HTML
Bu ayar, testler için hafızada çalışan bir SQLite veritabanı kullanmanızı sağlar.
Unit Testleri, tek bir fonksiyon veya sınıfın çalışmasını test eder. Bu testler, küçük ve bağımsız birimlerin doğruluğunu kontrol eder.
Yeni bir unit test oluşturmak için aşağıdaki Artisan komutunu kullanabilirsiniz:
php artisan make:test ExampleTest --unit
Bu komut, tests/Unit/ExampleTest.php
dosyasını oluşturur.
Basit bir toplama işlemini test eden bir unit test örneği:
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
public function test_basit_toplama()
{
$this->assertEquals(5, 2 + 3);
}
}
Bu test, 2 + 3
işleminin sonucunun 5
olup olmadığını kontrol eder.
Testi çalıştırmak için:
php artisan test --filter ExampleTest
Feature Testleri, uygulamanın belirli bir özelliğini test eder. Örneğin, bir API endpoint’inin çalışması veya bir veritabanı işlemi.
Yeni bir feature test oluşturmak için:
php artisan make:test UserTest
Bu komut, tests/Feature/UserTest.php
dosyasını oluşturur.
Kullanıcı kayıt işlemini test eden bir feature test örneği:
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
use RefreshDatabase;
public function test_kullanici_kayit_olabilir()
{
$response = $this->post('/register', [
'name' => 'Ali Veli',
'email' => 'ali@example.com',
'password' => 'password123',
'password_confirmation' => 'password123',
]);
$response->assertRedirect('/home');
$this->assertDatabaseHas('users', ['email' => 'ali@example.com']);
}
}
Bu test, kullanıcı kayıt işleminin başarılı olup olmadığını kontrol eder.
Testi çalıştırmak için:
php artisan test --filter UserTest
TDD yaklaşımını kullanarak bir blog yazısı ekleyen bir endpoint geliştirelim.
İlk adımda, testi yazalım:
public function test_kullanici_blog_yazisi_ekleyebilir()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/posts', [
'title' => 'Yeni Blog Yazısı',
'content' => 'Bu bir test yazısıdır.',
]);
$response->assertStatus(201);
$this->assertDatabaseHas('posts', ['title' => 'Yeni Blog Yazısı']);
}
Testi çalıştırdığımızda başarısız olacaktır çünkü henüz kod yazılmamıştır.
Testi geçecek kadar kod yazalım. Önce model, migration ve controller’ı oluşturalım:
php artisan make:model Post -mcr
Ardından, controller içinde store
metodunu yazalım:
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'content' => 'required',
]);
Post::create($request->all());
return response()->json(['message' => 'Post başarıyla oluşturuldu'], 201);
}
Testi tekrar çalıştırdığımızda başarılı olacaktır.
Laravel’de Test Driven Development (TDD) yaklaşımı, uygulamanızın güvenilir ve sürdürülebilir olmasını sağlar. Unit ve feature testleri ile kodunuzun doğruluğunu kanıtlayabilir ve hataları erken tespit edebilirsiniz. Testlerin düzenli olarak çalıştırılması, uygulamanızın kalitesini artırır ve geliştirme sürecini hızlandırır.
Eğer Laravel ile web uygulamaları geliştiriyorsanız, TDD yaklaşımını benimseyerek daha güvenilir ve sağlam bir kod tabanı oluşturabilirsiniz. 🚀
Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler Laravel, modern web uygulamalarında gerçek zamanlı bildirimler oluşturmak için güçlü…
Laravel’de Mail Gönderme ve Bildirimler Laravel, modern web uygulamaları geliştirirken e-posta gönderimi ve bildirim sistemleri…
Laravel, dosya yükleme ve depolama işlemleri için güçlü bir Storage (Dosya Depolama) mekanizması sunar. Bu mekanizma, yerel…
Laravel’de Çoklu Dil (Localization) Kullanımı: Uygulamanızı Küresel Hale Getirin 🌍 Laravel, modern web uygulamaları için…
Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi Laravel, modern web uygulamalarında belirli…
Laravel Event & Listener Kullanımı: Modüler ve Esnek Uygulama Geliştirme Laravel, modern web uygulamaları geliştirirken…