Sobes.tech
Middle+

Care este diferența dintre stop și mock?

sobes.tech AI

Răspuns de la AI

stop este utilizat în scopuri de depanare pentru a întrerupe execuția scriptului și pentru a vizualiza starea la un anumit moment. mock este o tehnică în testele unitare pentru a simula comportamentul dependențelor externe ale unei clase sau funcții, cu scopul de a izola codul testat.

Stop:

  • Obiectiv: Depanare, verificarea rezultatelor intermediare.
  • Aplicare: În timpul dezvoltării, pentru a opri temporar execuția.
  • Instrumente: Funcții încorporate (die(), exit()), instrumente de depanare (xdebug).
<?php
// Exemplu de utilizare a stop pentru depanare
$data = ['item1', 'item2'];
echo "Înainte de procesarea datelor.\n";
// Oprim execuția pentru a verifica conținutul lui $data
die(var_dump($data));
echo "După procesarea datelor.\n"; // Acest cod nu va fi executat

Mock:

  • Obiectiv: Teste unitare, izolare a codului testat.
  • Aplicare: Crearea de "stopuri" pentru dependențe (baze de date, API-uri externe, alte clase).
  • Instrumente: Framework-uri de testare (PHPUnit) și biblioteci pentru crearea mock-urilor (Mockery).
<?php
// Exemplu de concept mock (fără utilizarea unui framework, pentru ilustrație)
// Simulare de dependență
interface DataFetcher {
    public function fetchData(): array;
}

// Clasa1, care depinde de DataFetcher (testată)
class DataProcessor {
    private DataFetcher $fetcher;

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

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

// Obiect mock pentru DataFetcher în test
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Returnează date predefinite în loc de o solicitare reală
        return ['mock_item_1', 'mock_item_2'];
    }
}

// În test:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Verifică dacă $processed conține ['MOCK_ITEM_1', 'MOCK_ITEM_2']

Utilizarea mock-urilor permite testarea logicii clasei A fără a depinde de funcționarea corectă sau disponibilitatea clasei B, de care depinde A. În locul clasei B reale, se folosește un mock care returnează date previzibile sau verifică dacă anumite metode au fost apelate.