Assertions (iddialar)
- PHP kursu
- İleri seviye
- Ders 76/92
- 5 dk
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
<?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
<?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
<?php
public function testIsAdult(): void {
$user = new User(25);
$this->____($user->isAdult());
}
<?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.