Sobes.tech
Middle+

V čem spočívá rozdíl mezi stop a mock?

sobes.tech AI

Odpověď od AI

stop se používá k účelům ladění k přerušení provádění skriptu a zobrazení stavu v určitém bodě. mock je technika v jednotkových testech, která simuluje chování externích závislostí třídy nebo funkce s cílem izolovat testovaný kód.

Stop:

  • Cíl: Ladění, kontrola mezivýsledků.
  • Použití: Během vývoje, pro dočasné zastavení provádění.
  • Nástroje: Vestavěné funkce (die(), exit()), nástroje pro ladění (xdebug).
<?php
// Příklad použití stop pro ladění
$data = ['item1', 'item2'];
echo "Před zpracováním dat.\n";
// Zastavíme provádění pro kontrolu obsahu $data
die(var_dump($data));
echo "Po zpracování dat.\n"; // Tento kód nebude vykonán

Mock:

  • Cíl: Jednotkové testy, izolace testovaného kódu.
  • Použití: Vytváření "zarážek" pro závislosti (databáze, externí API, jiné třídy).
  • Nástroje: Testovací frameworky (PHPUnit) a knihovny pro tvorbu mocků (Mockery).
<?php
// Příklad konceptu mocku (bez použití frameworku, pro ilustraci)
// Simulace závislosti
interface DataFetcher {
    public function fetchData(): array;
}

// Třída1, která závisí na DataFetcher (testovaná)
class DataProcessor {
    private DataFetcher $fetcher;

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

    public function processData(): array {
        $data = $this->fetcher->fetchData();
        // Logika zpracování
        foreach ($data as &$item) {
            $item = strtoupper($item);
        }
        return $data;
    }
}

// Mock objekt pro DataFetcher v testu
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Vrací předem definovaná data místo skutečné žádosti
        return ['mock_item_1', 'mock_item_2'];
    }
}

// V testu:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Kontrola, že $processed obsahuje ['MOCK_ITEM_1', 'MOCK_ITEM_2']

Použití mocků umožňuje testovat logiku třídy A bez závislosti na správném fungování nebo dostupnosti třídy B, od které A závisí. Místo skutečné třídy B se používá mock, který vrací předvídatelná data nebo ověřuje, zda byly volány určité metody.