CodeBlanks Logo Icon CodeBlanks

Test düzeni (AAA)

PHP kursu · İleri seviye · Ders 77/92

Arrange-Act-Assert (Hazırla-Çalıştır-Doğrula) test düzenini öğrenirsin.

AAA deseni

AAA, bir testi üç bölümde yazma desenidir: Arrange (hazırla), Act (çalıştır), Assert (denetle). Önce gerekli nesneleri kurarsın (Arrange), sonra sınanacak yöntemi çağırırsın (Act), son olarak sonucu denetlersin (Assert). Bu düzen testi okunur kılar; yeni bir okuyucu amacı hemen görür. Bazı ekipler Given/When/Then adlarını kullanır; aynı anlama gelir.

Given/When/Then

Given/When/Then, AAA'nın davranış odaklı bir söyleyişidir. Given (verilen) başlangıç durumunu anlatır: Verilen boş bir sepet. When (olduğunda) eylemi söyler: Ekmek eklendiğinde. Then (o zaman) beklenen sonucu yazar: Sepette 1 ürün olmalı. İnsan diline yakın olduğu için iş analistleriyle ortak çalışırken faydalıdır. Kodda yine Arrange/Act/Assert'e karşılık gelir.

Uygulama AAA düzeninde test yaz

Library sınıfının borrow metodu kitabı ödünç verir ve true döner. LibraryTest sınıfını TestCase'ten türet. testBorrow metodunu AAA düzeninde yaz: Arrange bölümünde yeni Library ve "Çocuk Kalbi" kitabı, Act bölümünde borrow çağır, Assert bölümünde assertEquals ile true, assertCount ile kalan kitap sayısının 0 olduğunu denetle.

Örnek çözümü göster
class LibraryTest extends TestCase yaz. testBorrow içinde // Arrange, $library = new Library(["Çocuk Kalbi"]); // Act, $result = $library->borrow("Çocuk Kalbi"); // Assert, $this->assertEquals(true, $result); $this->assertCount(0, $library->books); ekle.
Ö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");
        }
    }
    protected function assertCount($expected, $actual): void {
        if (count($actual) !== $expected) {
            throw new Exception("Beklenen sayı $expected, gerçek " . count($actual));
        }
    }
}

class Library {
    public array $books = [];
    public function __construct(array $books = []) { $this->books = $books; }
    public function borrow(string $title): bool {
        $idx = array_search($title, $this->books);
        if ($idx === false) return false;
        array_splice($this->books, $idx, 1);
        return true;
    }
}

class LibraryTest extends TestCase {
    public function testBorrow(): void {
        // Arrange
        $library = new Library(["Çocuk Kalbi"]);
        // Act
        $result = $library->borrow("Çocuk Kalbi");
        // Assert
        $this->assertEquals(true, $result);
        $this->assertCount(0, $library->books);
    }
}

// Testi çalıştır
$test = new LibraryTest();
$test->testBorrow();
echo "testBorrow: BAŞARILI\n";

Kendini test et

  1. Hangisi Act bölümüdür?

    • $cart = new ShoppingCart();
    • $this->assertEquals(1, $cart->count());
    • use PHPUnit\Framework\TestCase;
    • $result = $cart->add("Ekmek");
    Cevabı göster

    $result = $cart->add("Ekmek"); — Doğru. Act, sınanacak yöntemi çağırır; add burada çağrılıyor.

  2. AAA bölümlerini eşleştir

    Arrange
    Hazırlık
    Act
    Çalıştırma
    Assert
    Denetleme
    Given
    Hazırlık (BDD)
  3. Act satırını tamamla

    <?php
    public function testAddReturnsItem(): void {
        // Arrange
        $cart = new ShoppingCart();
        // Act
        $result = ____->add("Ekmek");
        // Assert
        $this->assertEquals("Ekmek", $result);
    }
    
    Cevabı göster
    <?php
    public function testAddReturnsItem(): void {
        // Arrange
        $cart = new ShoppingCart();
        // Act
        $result = $cart->add("Ekmek");
        // Assert
        $this->assertEquals("Ekmek", $result);
    }
    

İleri seviye bölümündeki tüm dersler