CodeBlanks Logo Icon CodeBlanks

Assertions (iddialar)

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.

Başlangıç kodu

index.php
<?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;
    }
}

// ScoreKeeperTest sınıfını ve testStats metodunu yaz

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

Örnek çözüm

index.php
<?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";

Beklenen çıktı

testStats: BAŞARILI

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangi iddia int 4 ile string "4"ü aynı saymaz?

  • assertEquals(4, "4")
  • assertEquals("4", "4")
  • assertTrue(4 == "4")
  • assertSame(4, "4") Doğru cevap

Açıklama: assertSame türe de bakar; int 4 ile string "4" aynı değildir.

2 İddiaları eşleştir

Kavram Anlamı
assertEquals Değer eşitliği
assertSame Değer ve tür
assertTrue true bekler
assertContains Dizide var mı

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

Soru
<?php
public function testIsAdult(): void {
    $user = new User(25);
    $this->____($user->isAdult());
}
Cevap
<?php
public function testIsAdult(): void {
    $user = new User(25);
    $this->assertTrue($user->isAdult());
}

Açıklama: assertTrue ile true dönen yöntem sınanır.

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