Sobes.tech
Middle+

Mi a különbség a stop és a mock között?

sobes.tech MI

Válasz az MI-től

A stop hibakeresési célokra használják, hogy megszakítsák a szkript végrehajtását és megtekinthessék az állapotot egy adott ponton. A mock egy egységtesztekben alkalmazott technika, amely a külső függőségek viselkedését szimulálja egy osztály vagy függvény esetében, azzal a céllal, hogy izolálja a tesztelt kódot.

Stop:

  • Cél: Hibakeresés, közbenső eredmények ellenőrzése.
  • Alkalmazás: Fejlesztés közben, ideiglenesen a végrehajtás megállítására.
  • Eszközök: Beépített függvények (die(), exit()), hibakereső eszközök (xdebug).
<?php
// A stop használatának példája hibakereséshez
$data = ['item1', 'item2'];
echo "Az adatok feldolgozása előtt.\n";
// A végrehajtás megállítása az $data tartalmának ellenőrzéséhez
die(var_dump($data));
echo "Az adatok feldolgozása után.\n"; // Ez a kód nem fog végrehajtódni

Mock:

  • Cél: Egységtesztek, a tesztelendő kód izolálása.
  • Alkalmazás: "Stub"-okat hozunk létre függőségekhez (adatbázisok, külső API-k, más osztályok).
  • Eszközök: Teszt keretrendszerek (PHPUnit) és könyvtárak mock-ok készítéséhez (Mockery).
<?php
// A mock koncepció példája (keretrendszer nélkül, illusztrációként)
// Függőség szimulálása
interface DataFetcher {
    public function fetchData(): array;
}

// Az osztály, amely a DataFetcher-től függ (tesztelendő)
class DataProcessor {
    private DataFetcher $fetcher;

    public function __construct(DataFetcher $fetcher) {
        $this->fetcher = $fetcher;
    }

    public function processData(): array {
        $data = $this->fetcher->fetchData();
        // Feldolgozási logika
        foreach ($data as &$item) {
            $item = strtoupper($item);
        }
        return $data;
    }
}

// Mock objektum a DataFetcher-hez a tesztben
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Előre definiált adatokat ad vissza a valódi kérés helyett
        return ['mock_item_1', 'mock_item_2'];
    }
}

// A tesztben:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Ellenőrizze, hogy a $processed tartalmazza-e ['MOCK_ITEM_1', 'MOCK_ITEM_2']

A mock-ok használata lehetővé teszi az A osztály logikájának tesztelését anélkül, hogy függene a B osztály helyes működésétől vagy elérhetőségétől, amelytől A függ. A valódi B osztály helyett egy mockot használunk, amely előre meghatározott adatokat ad vissza vagy ellenőrzi, hogy bizonyos metódusokat hívtak-e meg.