Middle
Čo sú mocky a stubs? V čom sa líšia?
sobes.tech AI
Odpoveď od AI
Moky a stuby sú typy testovacích duplikátov, ktoré sa používajú pri modulárnom testovaní na simuláciu správania skutočných závislostí objektu.
Stub:
- Poskytuje "zástupné" správanie pre testovací scenár.
- Odpovedá na volania metód, vracajúc vopred stanovené hodnoty.
- Neoveruje interakcie. Jeho cieľom je zabezpečiť testovanému objektu dáta na pokračovanie v práci.
Mock:
- Podobný stubu, ale s pridanou logikou kontroly interakcií.
- Obsahuje očakávania týkajúce sa toho, ktoré metódy majú byť volané, koľkokrát a s akými argumentmi.
- Test kontroluje nielen výsledok, ale aj správnosť interakcie s mockom.
<?php
// Príklad mock-objektu
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()) // Očakávame jeden volanie
->method('getUserById')
->with(1) // Očakávame argument 1
->willReturn(['id' => 1, 'name' => 'Test User']); // Očakávaná hodnota
$userService = new UserService($databaseMock);
$user = $userService->getUserById(1);
// Kontrola výsledku a interakcie cez mock
$this->assertNotEmpty($user);
$this->assertEquals('Test User', $user['name']);
}
}
Rozdiely v tabuľke:
| Charakteristika | Stub (Stub) | Mock (Mock) |
|---|---|---|
| Účel | Poskytnúť dáta na prácu | Skontrolovať interakciu a dáta |
| Kontrola | Neoveruje interakcie | Kontroluje, ako objekt s ním pracuje |
| Správanie | Jednoducho vracia hodnoty | Obsahuje očakávania volaní |
Kto vykonáva assert |
Testovaný objekt alebo klient | Sám mock (cez očakávania) |