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 անում Փորձարկվող օբյեկտը կամ հաճախորդը Մոկը ինքն է (առանց սպասումների)