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 кылат |
Тестирлөөчү объект же кардар | Өзү мок (каалаганча күтүүлөр аркылуу) |