Sobes.tech
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)