Middle
Wat zijn mocks en stubs? Hoe verschillen ze?
sobes.tech AI
Antwoord van AI
Mocks en stubs zijn typen test-duplicaten die in unit tests worden gebruikt om het gedrag van echte afhankelijkheden van het object te simuleren.
Stub:
- Biedt een "vast" gedrag voor een testsituatie.
- Reageert op methodeaanroepen door vooraf gedefinieerde waarden terug te geven.
- Verifieert niet de interactie, het doel is om gegevens te leveren zodat het te testen object kan doorgaan.
<?php
// Voorbeeld van een stub-object
class StubDatabase {
public function getUserById(int $id): ?array {
// Simulatie van de geretourneerde waarde voor een specifiek ID
if ($id === 1) {
return ['id' => 1, 'name' => 'Test User'];
}
return null;
}
}
Mock:
- Gelijkaardig aan stub, maar met logica voor het controleren van de interactie.
- Bevat verwachtingen over welke methoden moeten worden aangeroepen, hoe vaak en met welke argumenten.
- De test controleert niet alleen het resultaat, maar ook de correcte interactie met de mock.
<?php
// Voorbeeld van een mock-object
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()) // Verwacht één oproep
->method('getUserById')
->with(1) // Verwacht argument 1
->willReturn(['id' => 1, 'name' => 'Test User']); // Verwachte return-waarde
$userService = new UserService($databaseMock);
$user = $userService->getUserById(1);
// Resultaat- en interactiecontrole
$this->assertNotEmpty($user);
$this->assertEquals('Test User', $user['name']);
}
}
Vergelijkingstabel:
| Kenmerk | Stub | Mock |
|---|---|---|
| Doel | Gegevens leveren voor de test | Interactie en gegevens controleren |
| Verificatie | Controleert interactie niet | Controleert hoe het object ermee omgaat |
| Gedragslogica | Geeft alleen waarden terug | Bevat verwachtingen over aanroepen |
Wie voert assert uit? |
Testobject of client | De mock zelf (via verwachtingen) |