“php artisan make:test UserTest
” komutu, Laravel framework’ü altında bulunan PHPUnit test aracını kullanarak yeni bir “UserTest"
adında bir test sınıfı oluşturur. Bu sınıf, uygulamanızdaki User
modelinin doğru şekilde çalışıp çalışmadığını test etmek için kullanılabilir.
Test sınıfları, Laravel’deki test süitlerinin temel yapı taşlarıdır ve testlerin nasıl yapılandırılacağı, nasıl çalışacağı ve nasıl raporlanacağı hakkında bilgi sağlarlar. Test sınıfları, testlerin otomatik olarak çalıştırılmasını sağlar ve hataların hızlı bir şekilde tespit edilmesine yardımcı olur.
“php artisan make:test UserTest
” komutunu kullanarak oluşturduğunuz UserTest
sınıfı, Laravel’in test araçlarına sahip bir sınıftır. Bu sınıf, testlerinizi yazmanız için bir şablon olarak kullanılır ve tests/Feature
dizini altında yer alır.
Test sınıfları, belirli bir işlevselliği veya uygulama özelliğini test etmek için kullanılır. Laravel, PHPUnit ile birlikte gelir ve PHPUnit, test sınıflarını çalıştırmak ve testlerin geçip geçmediğini kontrol etmek için kullanılır.
UserTest
sınıfı, kullanıcı işlemlerinin doğru çalışıp çalışmadığını test etmek için örnek bir sınıftır. Örneğin, UserTest
sınıfı, bir kullanıcının kaydedilmesi, güncellenmesi, silinmesi, listelenmesi gibi işlevleri test edebilir.
Testler, PHPUnit
‘ın assert
metodları kullanılarak yazılır. Bu metodlar, beklenen sonuçların gerçek sonuçlarla eşleşip eşleşmediğini kontrol eder. Örneğin, $this->assertTrue(true)
metodunu kullanarak, doğru bir test koşulunun gerçekleştiğini onaylayabilirsiniz.
Test sınıfları, uygulamanızdaki hataları tespit etmek, yeni özellikler eklemek veya değişiklikler yapmak için mevcut özelliklerin doğru çalışıp çalışmadığını test etmek için kullanılabilir. Bu şekilde, uygulamanızın kalitesini artırabilir ve güvenliğini sağlayabilirsiniz.
Örneğin, User
modelinin kaydedilmesi ve bulunmasıyla ilgili bir test yazmak istediğinizi varsayalım. User
modeli için yeni bir test sınıfı oluşturmak için şu komutu kullanabilirsiniz:
php artisan make:test UserModelTest --unit
Bu, tests/Unit
dizini altında UserModelTest.php
adında bir test dosyası oluşturur.
UserModelTest
sınıfına, test_user_can_be_created_and_retrieved()
adında bir test ekleyelim:
<?php
namespace Tests\Unit;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\TestCase;
class UserModelTest extends TestCase
{
use RefreshDatabase;
public function createApplication() {
$app = require __DIR__.'/../../bootstrap/app.php';
$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
return $app;
}
public function test_example(): void {
$this->assertTrue(true);
}
public function test_user_can_be_created_and_retrieved() {
$user = User::factory()->create([
'name' => 'Mikail LEKESIZ',
'email' => 'mikail@lekesiz.org',
'password' => Hash::make('password'),
]);
$this->assertDatabaseHas('users', ['email' => 'mikail@lekesiz.org']);
$retrievedUser = User::where('email', 'mikail@lekesiz.org')->first();
$this->assertEquals($user->id, $retrievedUser->id);
}
}
Bu test, bir kullanıcının kaydedilip kaydedilmediğini kontrol eder ve ardından kaydedilen kullanıcıyı bulmaya çalışır. Testin geçip geçmediğini kontrol etmek için $this->assertDatabaseHas()
ve $this->assertEquals()
metodlarını kullanır.
Bu testi çalıştırmak için php artisan test
komutunu kullanabilirsiniz.
UserModelTest
sınıfındaki test_user_can_be_created_and_retrieved()
metodu, bir kullanıcı oluşturmayı ve ardından veritabanından bu kullanıcıyı geri almayı test eder.
- Öncelikle,
User::factory()->create()
ile User modeli için bir factory kullanarak yeni bir kullanıcı oluşturulur ve veritabanına kaydedilir. - Ardından,
$this->assertDatabaseHas('users', ['email' => 'mikail@lekesiz.org']);
ile veritabanında oluşturulan kullanıcının gerçekten kaydedildiğini doğrulamak için bir kontrol yapılır. - Daha sonra,
User::where('email', 'mikail@lekesiz.org')->first();
ile veritabanından oluşturulan kullanıcıyı geri alır ve$retrievedUser
değişkenine atar. - Son olarak,
$this->assertEquals($user->id, $retrievedUser->id);
ile oluşturulan kullanıcının ve geri alınan kullanıcının aynı olduğunu kontrol eder (ID’lerinin eşit olduğunu doğrular).
Bu örnek, mevcut User
modelinde nasıl testler yazabileceğinizi gösterir. Model testleri, modellerin doğru çalışıp çalışmadığını test etmek için kullanılır ve uygulamanızın kalitesini artırmanıza yardımcı olur.
Feature
ve Unit
testleri, farklı seviyelerdeki testlerdir ve farklı amaçlar için kullanılırlar.
Feature
testleri, bir uygulamanın işlevselliğini kontrol etmek için kullanılır. Bu testler, uygulamanın bir HTTP isteğiyle nasıl davrandığını test eder. Örneğin, bir form gönderildiğinde veya bir bağlantı tıklandığında uygulamanın beklenen yanıtı verip vermediğini kontrol edebilirsiniz. Feature
testleri, uygulamanın tüm katmanlarını test etmek için kullanılır ve uygulamanızın gerçek kullanım senaryolarını simüle eder.
Unit
testleri, bir uygulamanın belirli bir parçasını test etmek için kullanılır. Bu testler, bir sınıfın veya yöntemin beklenen davranışını doğrulamak için kullanılır. Örneğin, bir sınıfın yöntemlerinin doğru şekilde çalışıp çalışmadığını veya bir işlevin doğru değerleri döndürüp döndürmediğini kontrol edebilirsiniz. Unit
testleri, uygulamanızın küçük parçalarını test etmek için kullanılır ve uygulamanın herhangi bir harici bağımlılığa ihtiyaç duymadan test edilebilmesini sağlar.
Feature
ve Unit
testlerinin ayırıcı özellikleri, test edilen konuların farklı seviyelerde olmasıdır. Feature
testleri, uygulamanın işlevselliğini test etmek için kullanılırken, Unit
testleri, kodun küçük parçalarını test etmek için kullanılır. Bu nedenle, uygulamanın doğru şekilde test edilmesi ve sorunların tespit edilmesi için hem Feature
hem de Unit
testlerine ihtiyaç vardır.
Laravel, Feature
testleri için tests/Feature
dizinini ve Unit
testleri için tests/Unit
dizinini kullanır. Bu sayede, test sınıflarınızı kolayca organize edebilir ve uygulamanızın her seviyesindeki işlevselliği doğru şekilde test edebilirsiniz.