CodeBlanks Logo Icon CodeBlanks

Assertions (iddialar)

PHP kursu · İleri seviye · Ders 76/92

assertEquals, assertTrue ve assertContains gibi yaygın assertion'ları öğrenirsin.

assertEquals ve assertSame

assertEquals($expected, $actual) en sık kullanılan iddiadır. İki değeri == ile karşılaştırır; eşitse test geçer. assertSame ise hem değere hem türe bakar (===): assertSame(4, 2 + 2) geçer ama assertSame(4, "4") başarısız olur. assertEquals(4, "4") ise == ile karşılaştığından geçer. Hangisini seçeceğin testin amacına bağlıdır.

Diğer yaygın iddialar

assertTrue($x) değerin true olmasını bekler; assertFalse tam tersi. assertContains("Elma", $liste) bir dizide eleman var mı diye bakar. assertCount(3, $liste) dizinin uzunluğunu denetler. PHPUnit 50'den fazla iddia sunar; hepsi aynı mantıktadır: koşul sağlanmazsa test başarısız olur. İddiayı seçerken en anlamlısı tercih et: assertTrue($x > 0) yerine assertGreaterThan(0, $x) daha açık söyler.

Uygulama Birden fazla iddia yaz

ScoreKeeper sınıfı puan ekler ve ortalama döner. ScoreKeeperTest sınıfını TestCase'ten türet. testStats metodunda 10 ve 20 puan ekle, assertEquals ile toplamın 30, assertCount ile listede 2 eleman, assertTrue ile ortalamanın 10'dan büyük olduğunu denetle.

Örnek çözümü göster
class ScoreKeeperTest extends TestCase yaz. testStats içinde $sk = new ScoreKeeper(); $sk->add(10); $sk->add(20); $this->assertEquals(30, array_sum($sk->scores)); $this->assertCount(2, $sk->scores); $this->assertTrue($sk->average() > 10); 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 assertTrue($condition): void {
        if ($condition !== true) { throw new Exception("Koşul true değil"); }
    }
    protected function assertCount($expected, $actual): void {
        if (count($actual) !== $expected) {
            throw new Exception("Beklenen sayı $expected, gerçek " . count($actual));
        }
    }
}

class ScoreKeeper {
    public array $scores = [];
    public function add(int $p): void { $this->scores[] = $p; }
    public function average(): float {
        return count($this->scores) ? array_sum($this->scores) / count($this->scores) : 0;
    }
}

class ScoreKeeperTest extends TestCase {
    public function testStats(): void {
        $sk = new ScoreKeeper();
        $sk->add(10);
        $sk->add(20);
        $this->assertEquals(30, array_sum($sk->scores));
        $this->assertCount(2, $sk->scores);
        $this->assertTrue($sk->average() > 10);
    }
}

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

Kendini test et

  1. İddiaları eşleştir

    assertEquals
    Değer eşitliği
    assertSame
    Değer ve tür
    assertTrue
    true bekler
    assertContains
    Dizide var mı
  2. Hangi iddia int 4 ile string "4"ü aynı saymaz?

    • assertEquals(4, "4")
    • assertEquals("4", "4")
    • assertSame(4, "4")
    • assertTrue(4 == "4")
    Cevabı göster

    assertSame(4, "4") — Doğru. assertSame türe de bakar; int 4 ile string "4" aynı değildir.

  3. assertTrue çağrısını tamamla

    <?php
    public function testIsAdult(): void {
        $user = new User(25);
        $this->____($user->isAdult());
    }
    
    Cevabı göster
    <?php
    public function testIsAdult(): void {
        $user = new User(25);
        $this->assertTrue($user->isAdult());
    }
    

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