setUp ve tearDown
setUp() ve tearDown() ile her testten önce ve sonra çalışan hazırlık kodunu öğrenirsin.
setUp ve tearDown ne işe yarar?
Birçok test aynı hazırlığı ister: yeni ShoppingCart, yeni User. Bu kodu her teste kopyalamak yerine setUp metodunu yazarsın. PHPUnit her testten önce setUp'ı otomatik çağırır; testten sonra ise tearDown çalışır. setUp ortak nesneleri kurar (fixture), tearDown dosya veya veritabanı gibi kaynakları temizler. Böylece her test birbirinden bağımsız ve tekrarlanabilir olur.
Test fixture
Fixture, testin çalışması için gerekli ortak durumdur: nesneler, dosyalar, veritabanı satırları. setUp bunları kurar; test metodu üzerine ek değişiklik yapar. İyi bir fixture küçük ve hızlıdır. Örneğin ShoppingCartTest'te setUp her seferinde boş bir sepet kurar; testler ekleme, çıkarma, temizleme gibi farklı senaryoları sınar. tearDown gerekli değilse yazılmaz; PHPUnit nesneleri zaten otomatik temizler.
Uygulama setUp ile fixture kur
ShoppingCartTest sınıfını TestCase'ten türet. setUp metodu ile her testten önce yeni bir ShoppingCart kur, $cart özelliğine ata. testStartsEmpty metodunda assertEquals ile count'un 0 olduğunu, testAddIncreasesCount metodunda "Ekmek" ekle ve assertEquals ile count'un 1 olduğunu denetle.
Örnek çözümü göster
void { $this->cart = new ShoppingCart(); } ekle. testStartsEmpty'de $this->assertEquals(0, $this->cart->count()). testAddIncreasesCount'ta $this->cart->add("Ekmek"); $this->assertEquals(1, $this->cart->count()).
Örnek çözüm:
<?php
// Bu derste TestCase'i basitçe tanımlıyoruz
class TestCase {
protected function assertEquals($expected, $actual): void {
if ($expected !== $actual) {
throw new Exception("Beklenen $expected, gerçek $actual");
}
}
}
class ShoppingCart {
private array $items = [];
public function add(string $item): void { $this->items[] = $item; }
public function count(): int { return count($this->items); }
}
class ShoppingCartTest extends TestCase {
private ShoppingCart $cart;
protected function setUp(): void {
$this->cart = new ShoppingCart();
}
public function testStartsEmpty(): void {
$this->assertEquals(0, $this->cart->count());
}
public function testAddIncreasesCount(): void {
$this->cart->add("Ekmek");
$this->assertEquals(1, $this->cart->count());
}
}
// Testleri çalıştır
$test = new ShoppingCartTest();
$test->setUp();
$test->testStartsEmpty();
echo "testStartsEmpty: BAŞARILI\n";
$test->setUp();
$test->testAddIncreasesCount();
echo "testAddIncreasesCount: BAŞARILI\n";
Kendini test et
-
Yaşam döngüsünü eşleştir
- setUp
- Her testten önce
- tearDown
- Her testten sonra
- testAdd
- Sınama metodu
- fixture
- Ortak hazırlık
-
setUp bir test sınıfında kaç kez çalışır?
- Tüm testlerden önce bir kez
- Her testten sonra bir kez
- Her testten önce bir kez
- Yalnızca ilk testten önce
Cevabı göster
Her testten önce bir kez — Doğru. setUp her testten önce bir kez çağrılır; testler birbirini etkilemez.
-
setUp metodunu tamamla
<?php class CartTest extends TestCase { private ShoppingCart $cart; protected function ____(): void { $this->cart = new ShoppingCart(); } }Cevabı göster
<?php class CartTest extends TestCase { private ShoppingCart $cart; protected function setUp(): void { $this->cart = new ShoppingCart(); } }