Sobes.tech
Middle+

Wat is het verschil tussen stop en mock?

sobes.tech AI

Antwoord van AI

stop wordt gebruikt voor debuggingdoeleinden om de uitvoering van het script te onderbreken en de toestand op een bepaald punt te bekijken. mock is een techniek in unittests om het gedrag van externe afhankelijkheden van een klasse of functie te simuleren, met als doel de geteste code te isoleren.

Stop:

  • Doel: Debugging, controle van tussenresultaten.
  • Toepassing: Tijdens de ontwikkeling, om de uitvoering tijdelijk te stoppen.
  • Tools: Ingebouwde functies (die(), exit()), debuggingtools (xdebug).
<?php
// Voorbeeld van gebruik van stop voor debugging
$data = ['item1', 'item2'];
echo "Voor de gegevensverwerking.\n";
// Stop de uitvoering om de inhoud van $data te controleren
die(var_dump($data));
echo "Na de gegevensverwerking.\n"; // Deze code wordt niet uitgevoerd

Mock:

  • Doel: Unittests, isolatie van de te testen code.
  • Toepassing: Het maken van "stubs" voor afhankelijkheden (databases, externe API's, andere klassen).
  • Tools: Testframeworks (PHPUnit) en bibliotheken voor het maken van mocks (Mockery).
<?php
// Voorbeeld van mock-concept (zonder framework, ter illustratie)
// Afhankelijkheid simulatie
interface DataFetcher {
    public function fetchData(): array;
}

// Klasse1, afhankelijk van DataFetcher (getest)
class DataProcessor {
    private DataFetcher $fetcher;

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

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

// Mock-object voor DataFetcher in de test
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Retourneert vooraf gedefinieerde gegevens in plaats van een echte aanvraag
        return ['mock_item_1', 'mock_item_2'];
    }
}

// In de test:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Controleer dat $processed ['MOCK_ITEM_1', 'MOCK_ITEM_2'] bevat

Het gebruik van mocks stelt je in staat om de logica van klasse A te testen zonder afhankelijk te zijn van de correcte werking of beschikbaarheid van klasse B, waarvan A afhankelijk is. In plaats van de echte klasse B wordt een mock gebruikt die voorspelbare gegevens retourneert of controleert of bepaalde methoden zijn aangeroepen.