Test düzeni (AAA)
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
-
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.
-
AAA bölümlerini eşleştir
- Arrange
- Hazırlık
- Act
- Çalıştırma
- Assert
- Denetleme
- Given
- Hazırlık (BDD)
-
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); }