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