Sobes.tech
Middle+

У чему се састоји разлика између stop и mock?

sobes.tech АИ

Одговор од АИ

stop се користи у сврху дебаговања за прекид извршавања скрипте и преглед стања у одређеном тренутку. mock је техника у јединичном тестирању за имитирање понашања спољашњих зависности класе или функције са циљем изолације тестираног кода.

Stop:

  • Циљ: Дебаговање, провера међустепених резултата.
  • Примена: Током развоја, за привремено заустављање извршавања.
  • Алатке: Уграђене функције (die(), exit()), алати за дебаговање (xdebug).
<?php
// Пример коришћења stop за дебаговање
$data = ['item1', 'item2'];
echo "Пре обраде података.\n";
// Заустављамо извршавање за проверу садржаја $data
die(var_dump($data));
echo "После обраде података.\n"; // Овај код се неће извршити

Mock:

  • Циљ: Јединично тестирање, изолација тестираног кода.
  • Примена: Стварање "заглушења" за зависности (базе података, спољашњи API-ји, други класе).
  • Алатке: Фрејмворкови за тестирање (PHPUnit) и библиотеке за креирање мокова (Mockery).
<?php
// Пример концепта mock-а (без коришћења фрејмворка, за илустрацију)
// Имитација зависности
interface DataFetcher {
    public function fetchData(): array;
}

// Класа1, која зависи од DataFetcher (тестирана)
class DataProcessor {
    private DataFetcher $fetcher;

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

    public function processData(): array {
        $data = $this->fetcher->fetchData();
        // Нека логика обраде
        foreach ($data as &$item) {
            $item = strtoupper($item);
        }
        return $data;
    }
}

// Mock-објекат за DataFetcher у тесту
class MockDataFetcher implements DataFetcher {
    public function fetchData(): array {
        // Враћа предодређене податке уместо стварног захтева
        return ['mock_item_1', 'mock_item_2'];
    }
}

// У тесту:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Проверавамо да ли $processed садржи ['MOCK_ITEM_1', 'MOCK_ITEM_2']

Користећи мокове, можемо тестирати логику класе A без ослањања на исправност рада или доступност класе B, од које A зависи. Уместо стварне класе B, користи се мок који враћа предвидљиве податке или проверава да ли су позвани одређени методи.