Sobes.tech
Middle

Мок жана стуб деген эмне? Алар кандай айырмаланат?

sobes.tech AI

AIден жооп

Мокторлор жана стабдар — бул тест дублерлердин түрлөрү, алар модулдук тестирлөөдө реалдуу көзкарандардын жүрүм-турумун имитациялоо үчүн колдонулат.

Стаб (Stub):

  • Тест сценарийи үчүн "алмаштыргыч" жүрүм-турумду камсыздайт.
  • Метод чакырууларына жооп берип, алдын ала белгиленген маанилерди кайтарат.
  • Интеракциялардын текшерүүсүн жүргүзбөйт. Анын максаты — тесттелүүчү объектке ишин улантуу үчүн маалымат берүү.

Мок (Mock):

  • Стабга окшош, бирок өзгөчө интеракциялардын текшерүүсү менен коштолгон.
  • Кайсы методдор чакырылышы керек, канча жолу жана кандай аргументтер менен экенине карата күтүүлөрдү камтыйт.
  • Тест натыйжаны гана эмес, мок менен өз ара аракетти да текшерет.
<?php
// Мок-объекттин мисалы
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\MockObject\MockObject;

class UserServiceTest extends TestCase {
    public function testGetUserByIdCallsDatabase(): void {
        $databaseMock = $this->createMock(Database::class);
        $databaseMock->expects($this->once()) // Бир чакырууну күтүп жатабыз
                     ->method('getUserById')
                     ->with(1) // Аргумент 1 деп күтүлүүдө
                     ->willReturn(['id' => 1, 'name' => 'Test User']); // Күтүлүүдө турган кайтарым мааниси

        $userService = new UserService($databaseMock);
        $user = $userService->getUserById(1);

        // Натыйжаны жана интеракцияны мок аркылуу текшерүү
        $this->assertNotEmpty($user);
        $this->assertEquals('Test User', $user['name']);
    }
}

Таблицада айырмачылыктар:

Өзгөчөлүк Стаб (Stub) Мок (Mock)
Максат Иштөө үчүн маалымат берүү Интеракцияны жана маалыматтарды текшерүү
Текшерүү Интеракцияларды текшербейт Объект менен иштөө тууралыгын текшерет
Жүрүм-турум Жөнөкөй маанилерди кайтарат Чакырууларга күтүүлөрдү камтыйт
Ким assert кылат Тестирлөөчү объект же кардар Өзү мок (каалаганча күтүүлөр аркылуу)