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