Sobes.tech
Middle+

stop жана mock ортосундагы айырма эмнеде?

sobes.tech AI

AIден жооп

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;
}

// DataFetcherге көз каранды класс1 (тесттелүүчү)
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;
    }
}

// Тестте мок объект 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 классынын ордуна мок колдонулат, ал алдын ала белгиленген маалыматтарды кайтарат же белгилүү методдор чакырылганын текшерет.