Laravel’de Test Driven Development (TDD) ve Test Yazımı

Web Doktoru - Laravel’de Test Driven Development (TDD) ve Test Yazımı

Laravel’de Test Driven Development (TDD) ve Test Yazımı

İçindekiler

Laravel’de Test Driven Development (TDD) ve Test Yazımı: Güvenilir ve Sürdürülebilir Kod Geliştirme

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.


1️⃣ Test Driven Development (TDD) Nedir?

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.

TDD Süreci:

  1. Testi Yaz (Fail): İlk adımda, henüz kod yazılmadan testler oluşturulur. Bu testler başarısız olur çünkü kod henüz mevcut değildir.
  2. Kodu Yaz (Pass): Testleri geçecek kadar kod yazılır. Bu aşamada, kodun sadece testleri geçecek kadar basit olması yeterlidir.
  3. Refaktör Et (Refactor): Kodu temizleyerek ve optimize ederek daha sürdürülebilir hale getirilir.
  4. Tekrar Et (Repeat): Yeni özellikler için aynı süreç tekrarlanır.

TDD’nin Avantajları:

  • Hataları Erken Tespit Eder: Testler, kodun doğruluğunu erken aşamada kontrol eder.
  • Güvenilir Kod: Testler, kodun güvenilir ve hatasız olmasını sağlar.
  • Sürdürülebilirlik: Kodun bakımı ve genişletilebilirliği kolaylaşır.
  • Dokümantasyon: Testler, kodun nasıl çalışması gerektiğini belgeler.

2️⃣ Laravel’de Test Ortamını Ayarlama

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:

  • Unit Testleri (Birim Testleri): Tek bir fonksiyon veya sınıfın çalışmasını test eder.
  • Feature Testleri (Özellik Testleri): Uygulamanın belirli bir özelliğini test eder (örn. API endpoint’leri, veritabanı işlemleri).

Testleri Çalıştırma

Testleri çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

php artisan test

Test Veritabanını Ayarlama

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.


3️⃣ Unit Test Yazımı (Birim Testleri)

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şturma

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.

Örnek Unit Test

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ırma

Testi çalıştırmak için:

php artisan test --filter ExampleTest

4️⃣ Feature Test Yazımı (Özellik Testleri)

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şturma

Yeni bir feature test oluşturmak için:

php artisan make:test UserTest

Bu komut, tests/Feature/UserTest.php dosyasını oluşturur.

Örnek Feature Test

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' => '[email protected]',
            'password' => 'password123',
            'password_confirmation' => 'password123',
        ]);

        $response->assertRedirect('/home');
        $this->assertDatabaseHas('users', ['email' => '[email protected]']);
    }
}

Bu test, kullanıcı kayıt işleminin başarılı olup olmadığını kontrol eder.

Testi Çalıştırma

Testi çalıştırmak için:

php artisan test --filter UserTest

5️⃣ TDD ile Laravel Geliştirme

TDD yaklaşımını kullanarak bir blog yazısı ekleyen bir endpoint geliştirelim.

1. Testi Yaz (Fail)

İ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ı']);
}

2. Testi Çalıştır (Fail)

Testi çalıştırdığımızda başarısız olacaktır çünkü henüz kod yazılmamıştır.

3. Kodu Yaz (Pass)

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);
}

4. Testi Tekrar Çalıştır (Pass)

Testi tekrar çalıştırdığımızda başarılı olacaktır.


6️⃣ Sonuç

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. 🚀


Ek Konu Başlıkları:

  • Mocking ve Stubbing: Testlerde bağımlılıkları simüle etme.
  • Test Coverage: Kodun ne kadarının test edildiğini ölçme.
  • Continuous Integration (CI): Testleri otomatik olarak çalıştırma.
  • Browser Testleri: Laravel Dusk ile tarayıcı tabanlı testler yazma.
Picture of Web Doktoru
Web Doktoru
Matematikçi, Adli Bilişim Uzmanı, Bil. Yük. Müh. Full Stack Developer
İlginizi Çekebilir
Web Doktoru - Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler Laravel, modern web uygulamalarında gerçek zamanlı bildirimler oluşturmak için güçlü araçlar sunar. WebSockets, Pusher, Laravel Echo ve Broadcasting gibi teknolojiler

Web Doktoru - Laravel’de Mail Gönderme ve Bildirimler 📩

Laravel’de Mail Gönderme ve Bildirimler 📩

Laravel’de Mail Gönderme ve Bildirimler Laravel, modern web uygulamaları geliştirirken e-posta gönderimi ve bildirim sistemleri gibi ihtiyaçları kolayca karşılamak için güçlü araçlar sunar. Bu yazıda,

Whatsapp ile mesaj göndermek için tıklayın

Telefon ile sadece 09:00 - 18:00 saatleri arası ulaşabilirsiniz.