Sobes.tech
Middle+

V čom spočíva rozdiel medzi stop a mock?

sobes.tech AI

Odpoveď od AI

stop sa koristi u svrhu debugovanja za prekid izvršavanja skripte i pregled stanja u određenom trenutku. mock je tehnika u jedinicnom testiranju za imitiranje ponašanja spoljnih zavisnosti klase ili funkcije sa ciljem izolacije testiranog koda.

Stop:

  • Cilj: Debugovanje, provera međustepenih rezultata.
  • Primena: Tokom razvoja, za privremeno zaustavljanje izvršavanja.
  • Alati: Ugrađene funkcije (die(), exit()), alati za debugovanje (xdebug).
<?php
// Primer korišćenja stop za debugovanje
$data = ['item1', 'item2'];
echo "Pre obrade podataka.\n";
// Zaustavljamo izvršavanje za proveru sadržaja $data
die(var_dump($data));
echo "Posle obrade podataka.\n"; // Ovaj kod se neće izvršiti

Mock:

  • Cilj: Jedinično testiranje, izolacija testiranog koda.
  • Primena: Kreiranje "zaglushki" za zavisnosti (baze podataka, spoljašnji API-ji, drugi klase).
  • Alati: Frameworkovi za testiranje (PHPUnit) i biblioteke za kreiranje mockova (Mockery).
<?php
// Primer koncepta mock-a (bez korišćenja frameworka, za ilustraciju)
// Imitacija zavisnosti
interface DataFetcher {
    public function fetchData(): array;
}

// Klasa1, koja zavisi od DataFetcher (testirana)
class DataProcessor {
    private DataFetcher $fetcher;

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

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

// Mock-objekat za DataFetcher u testu
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Vraća predodređene podatke umesto stvarnog zahteva
        return ['mock_item_1', 'mock_item_2'];
    }
}

// U testu:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Proveravamo da li $processed sadrži ['MOCK_ITEM_1', 'MOCK_ITEM_2']

Korišćenjem mockova, možemo testirati logiku klase A bez oslanjanja na ispravnost rada ili dostupnost klase B, od koje A zavisi. Umesto stvarne klase B, koristi se mock koji vraća predvidljive podatke ili proverava da li su pozvani određeni metodi.