PHP Laravel’ de Unit Test Yazma

Bir yazılım projesinde geliştirdiğimiz kodların en az hata ile canlı ortama çıkmasını istiyorsak, unit testinin yazılıp test edilmesi bizim için önemlidir. Özellikle büyük ve kurumsal firmalarda çalışacaksak yazdığımız kodun testinin yapılması istenir.

Bu yazıda PHP Laravel‘ de unit testin nasıl yazılacağını ve yazılan testin nasıl çalıştırılacağını anlatacağım. Test yazmak ilk başlarda korkutucu ve zaman kaybı gibi gelebilir. Fakat test yazmaya alıştıkça ve pratik yaptıkça el alışkanlığımız gelişecektir.

Laravel, unit testlerini çalıştıracağımız PHPUnit paketi ile birlikte gelir. PHPUnit PHP’nin unit test frameworküdür.

İlk önce Laravel’ de test kodları nereye yazılır ve nerede bulunur ona bakalım. Laravel ‘ de yazacağımız testler tests klasörünün içinde bulunur.

Bu klasörün içinde Feature ve Unit klasörleri ve bu klasörlerde de örnek testler bulunur.

Bu testleri çalıştırmanın 2 yöntemi vardır.

  1. ./vendor/bin/phpunit
  2. php artisan test

sadece Unit testleri çalıştırmak istiyorsak php artisan test --testsuite=Unit komutlarını terminal ekranında çalıştırıyoruz.

Laravel’ de çalıştırılacak testler ile ilgili genel ayarlar phpunit.xml dosyasında yapılır.

İlk Testimizi Yazma

Bu yazıda PostsController ‘ ımızın içindeki add_post() metodumuza test yazacağız.

public function add_post(Request $request)
    { 
        $name = $request->title;
        $content = $request->content;
        $status = $request->status;
        
        $post = Posts::create([
                'name'=>$name,
                'content'=>$content,
                'status' =>$status ?? 0
            ]);
       
        return response()->json($post, 200);
    }

Kendi testimizi yazmak için ilk önce terminalde php artisan make:test PostTest --unit komutlarını çalıştırıyoruz. Unit klasörünün altında oluşan PostTest.php dosyasına ilk testimizi yazalım.

<?php

namespace Tests\Unit;

use Tests\TestCase;

class PostTest extends TestCase
{
    public function test_add_post()
    {
        $response = $this->call('POST', '/admin/add-post', [
            'name' => 'Some post title 123',
            'content' => 'Some post content 123',
            'status' => false
        ]);

        $response->assertStatus($response->status(), 200);
    }
}

testi çalıştırmak için php artisan test komutunu terminalde çalıştırıyoruz.

Başarılar dilerim…