Sobes.tech
Middle+

Kuo skiriasi stop ir mock?

sobes.tech AI

Atsakymas iš AI

stop naudojamas derinimo tikslais nutraukti skripto vykdymą ir peržiūrėti būseną tam tikru momentu. mock — tai technika vienetiniame testavime, imituojant išorinių priklausomybių (klasės ar funkcijos) elgesį, siekiant izoliuoti testuojamą kodą.

Stop:

  • Tikslas: Derinimas, tarpiniai rezultatų patikrinimai.
  • Naudojimas: Kūrimo metu, laikinai sustabdyti vykdymą.
  • Įrankiai: Įmontuotos funkcijos (die(), exit()), derinimo įrankiai (xdebug).
<?php
// Pavyzdys, kaip naudoti stop derinimui
$data = ['item1', 'item2'];
echo "Duomenų apdorojimo pradžioje.\n";
// Sustabdome vykdymą duomenų turiniui patikrinti
die(var_dump($data));
echo "Po duomenų apdorojimo.\n"; // Šis kodas nebus vykdomas

Mock:

  • Tikslas: Vienetinis testavimas, testuojamo kodo izoliacija.
  • Naudojimas: Sukurti "pamušalus" priklausomybėms (duomenų bazės, išoriniai API, kiti klasės).
  • Įrankiai: Testavimo karkasai (PHPUnit) ir bibliotekos mokų kūrimui (Mockery).
<?php
// Pavyzdys, kaip koncepcija mock (be naudojimo karkaso, iliustracijai)
// Priklausomybės imitacija
interface DataFetcher {
    public function fetchData(): array;
}

// Klasė1, kuri priklauso nuo DataFetcher (testuojama)
class DataProcessor {
    private DataFetcher $fetcher;

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

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

// Mock objektas DataFetcher testui
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Grąžina iš anksto apibrėžtus duomenis vietoje realaus užklausos
        return ['mock_item_1', 'mock_item_2'];
    }
}

// Teste:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Patikriname, ar $processed turi ['MOCK_ITEM_1', 'MOCK_ITEM_2']

Naudojant mokus, galima testuoti klasės A logiką, neatsižvelgiant į klases B teisingą veikimą ar prieinamumą, nuo kurios A priklauso. Vietoje realios klasės B naudojamas mokas, kuris grąžina prognozuojamus duomenis arba tikrina, ar buvo iškviesti tam tikri metodai.