TR

Oyununuzu test etmek (PHPUnit)

Bir JumPHP oyununun PHPUnit testleri olabilir: skor hesabı, çarpışmalar, yapay zekâ, bir bölümün yüklenmesi… ve özellikle oyunu oynayan testler (“raket yukarıdan aşağıya gider”) ki onları oynarken izlersiniz. Playground bunları yayınlanan sürüm üzerinde, bir kum havuzunda çalıştırır ve sonucu Stüdyo'da test test, her oyun testinin filmiyle birlikte gösterir.

Claude oyununuzu geliştirirken bu testleri yazdıkça yazar: her mekaniğin (bir hareket, bir zıplama, bir atış, bir bonus, bir düşman, bir bölümün sonu) onu oynayan bir testi vardır, her değişiklikten sonra çalıştırılır. Onları JumPHP panelinde canlı oynarken görürsünüz, sonra her yayınlamadan sonra Stüdyo'da filme alınmış halde yeniden izlersiniz.

Bir test yazmak

Oyunun klasöründe, …Test.php sınıfları içeren bir tests/ klasörü (PHPUnit 11):

<?php
// tests/ScoreTest.php
namespace Tests;

use App\Entity\Score;
use PHPUnit\Framework\TestCase;

final class ScoreTest extends TestCase
{
    public function testABrickIsWorthTenPoints(): void
    {
        $score = new Score();
        $score->brick();
        self::assertSame(10, $score->points());
    }
}

Oyunun kodu, oyundaki gibi yüklenir (composer.json dosyasındaki ad alanları, App\ → src/), sürümünün JumPHP motoruyla. Tests\ → tests/. Bilgisayarınızda bin/jumphp test <oyun> da bunları çalıştırır (diğer kontrollerle birlikte).

Oyunu oynayan testler

Bir oyun testi oyunu kare kare oynatır, sonra olanı doğrular: “raket yukarıdan aşağıya gider”, “top sekiyor”, “zıplama platforma geri iniyor”. JumPHP\Testing\GameTestCase sınıfını genişletir:

<?php
namespace Tests;

use App\Entity\Paddle;
use App\Scene\PlayScene;
use JumPHP\Testing\GameTestCase;

final class PaddleTest extends GameTestCase
{
    public function testThePaddleGoesFromTheTopToTheBottom(): void
    {
        $this->game->start(PlayScene::class, ['mode' => 'local']);  // sahne, hemen
        $paddle = $this->game->peek('left');                       // sahnenin bir alanı, özel olsa bile
        $this->game->hold('p1_up', 60);                            // tuş 60 kare (1 sn) basılı tutulur
        self::assertEqualsWithDelta(PlayScene::TOP, $paddle->getBoundingBox()['y'], 1);
        $this->game->hold('p1_down', 90);
        self::assertEqualsWithDelta(PlayScene::BOTTOM - Paddle::HEIGHT, $paddle->getBoundingBox()['y'], 1);
    }
}

Ayrıca: press($action), run($frames), wait($seconds), scene(), shot($name) (bir ekran görüntüsü). Testleri cümle gibi adlandırın (testTheBallBouncesOnThePaddle): öyle görüntülenirler (“The ball bounces on the paddle”).

Onları oynarken izlersiniz, her yerde:

  • bilgisayarınızda: bin/jumphp test <oyun> onları çalıştırır ve Claude Code'un JumPHP paneli her testi canlı (oyunun hızında), ardından son karesini gösterir;
  • sitede: playground'un kum havuzu onları penceresiz oynatır ve her testi filme alır (oyunun her 4 karesinden biri). Stüdyo'nun testler sayfası onları çalışırken gösterir, sonra döngüde yeniden oynatır: ▶ / ⏸, kare kare ilerlemek için bir kaydırıcı, görüntüyü büyütmek için bir tıklama.

Bu testler JumPHP\Testing gerektirir (JumPHP 0.2.1 ya da daha yenisi): 0.2.0 sürümündeki bir oyun sitede en yeni motorla test edilir ve çıktı bunu söyler. Bilgisayarınızda bin/jumphp update JumPHP'yi günceller.

Çalıştırmak

  • Stüdyo → projeniz → Testler (PHPUnit) → “▶ Testleri çalıştır”: sayfa kendiliğinden güncellenir (oyun testlerinin filmleri çalışırken görünür), sonra her testi (✔ / ✘ ve başarısızlık mesajı), her oyun testinin filmini ve PHPUnit'in tam çıktısını gösterir.
  • Claude'unuz: run_tests, ardından get_test_run (MCP sunucusu), örneğin her sync_project sonrasında.

Kum havuzu

Testler playground'un sunucusunda, yalıtılmış çalışır: PHP 8.5 (tarayıcıdaki motor gibi), PHPUnit 11, ağsız, yetkisiz bir kullanıcı altında, en fazla 120 saniye ve 256 MB, pencere ve ses olmadan (SDL “boşta” çalışır: oyun testleri film için yine de her kareyi çizer). Oyunun özel dosyaları orada bulunmaz. Sonuçları ve filmleri yalnızca oyunun sahibi görür (son 5 çalıştırmanınkiler saklanır).