Middle
Kas ir mock un stub? Kā tie atšķiras?
sobes.tech AI
Atbilde no AI
Moki un stabji ir testēšanas dubļi — tie ir testēšanas dubļi, kas tiek izmantoti moduļu testēšanā, lai imitētu reālo atkarību uzvedību.
Stabs (Stub):
- Nodrošina "aizstājēja" uzvedību testēšanas scenārijam.
- Atbild uz metožu izsaukumiem, atgriežot iepriekš noteiktas vērtības.
- Nepārbauda mijiedarbības. Tā mērķis ir nodrošināt testējamam objektam datus turpmākai darbībai.
Moks (Mock):
- Ir līdzīgs stabam, bet ar pievienotu mijiedarbības pārbaudes loģiku.
- Satur gaidījumus par to, kuras metodes jāizsauc, cik reižu un ar kādiem argumentiem.
- Tests pārbauda ne tikai rezultātu, bet arī pareizību mijiedarbībā ar moku.
<?php
// Moka piemērs
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()) // Gaidām vienu izsaukumu
->method('getUserById')
->with(1) // Gaidāms arguments 1
->willReturn(['id' => 1, 'name' => 'Test User']); // Gaidāmās atgrieztās vērtības
$userService = new UserService($databaseMock);
$user = $userService->getUserById(1);
// Rezultāta un mijiedarbības pārbaude ar moku
$this->assertNotEmpty($user);
$this->assertEquals('Test User', $user['name']);
}
}
Tabulas atšķirības:
| Īpašība | Stabs (Stub) | Moks (Mock) |
|---|---|---|
| Mērķis | Nodrošināt datus darbam | Pārbaudīt mijiedarbību un datus |
| Pārbaude | Nepārbauda mijiedarbības | Pārbauda, kā objekts darbojas ar to |
| Uzvedība | Vienkārši atgriež vērtības | Satur gaidījumus par izsaukumiem |
Kas veic assert |
Testējamais objekts vai klients | Pašs moks (caur gaidījumiem) |