Middle
Mock va stub nima? Ular qanday farq qiladi?
sobes.tech AI
AIdan javob
Mocklar va stublar, obyektning haqiqiy bog'liqliklarining xulq-atvorini taqlid qilish uchun biriktirilgan test nusxalarining turlari.
Stub:
- Test uchun "qattiq" xulq-atvorni taqdim etadi.
- Metod chaqiruvlariga javob berib, oldindan belgilangan qiymatlarni qaytaradi.
- Interaktsiyani tekshirmaydi, uning maqsadi, test qilinayotgan ob'ektga davom etish uchun ma'lumotlar taqdim etish.
<?php
// Stub ob'ekt misoli
class StubDatabase {
public function getUserById(int $id): ?array {
// Aniq ID uchun qaytariladigan qiymatning taqlidi
if ($id === 1) {
return ['id' => 1, 'name' => 'Test User'];
}
return null;
}
}
Mock:
- Stubga o'xshash, ammo interaktsiyani tekshirish mantiqi bilan.
- Qaysi metodlar chaqirilishi, qancha va qanday argumentlar bilan chaqirilishi haqida kutishlar mavjud.
- Test faqat natijani emas, balki mock bilan to'g'ri interaktsiyani ham tekshiradi.
<?php
// Mock ob'ekt misoli
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()) // Bir chaqiruv kutamiz
->method('getUserById')
->with(1) // Argument 1 kutamiz
->willReturn(['id' => 1, 'name' => 'Test User']); // Kutilyotgan qiymat
$userService = new UserService($databaseMock);
$user = $userService->getUserById(1);
// Natija va interaktsiya tekshiruvi
$this->assertNotEmpty($user);
$this->assertEquals('Test User', $user['name']);
}
}
Taqqoslash jadvali:
| Xususiyat | Stub | Mock |
|---|---|---|
| Ma'no | Ish uchun ma'lumot taqdim etadi | Interaktsiya va ma'lumotlarni tekshiradi |
| Tekshirish | Interaktsiyani tekshirmaydi | Ob'ekt bilan qanday ishlashini tekshiradi |
| Xulq-atvor mantiqi | Faqat qiymatlarni qaytaradi | Kutishlar bilan bo'ladi |
assertni kim bajaradi? |
Test qiluvchi ob'ekt yoki mijoz | O'zi (kutishlar orqali) |