Middle+
Care este diferența dintre stop și mock?
sobes.tech AI
Răspuns de la AI
stop este utilizat în scopuri de depanare pentru a întrerupe execuția scriptului și pentru a vizualiza starea la un anumit moment. mock este o tehnică în testele unitare pentru a simula comportamentul dependențelor externe ale unei clase sau funcții, cu scopul de a izola codul testat.
Stop:
- Obiectiv: Depanare, verificarea rezultatelor intermediare.
- Aplicare: În timpul dezvoltării, pentru a opri temporar execuția.
- Instrumente: Funcții încorporate (
die(),exit()), instrumente de depanare (xdebug).
<?php
// Exemplu de utilizare a stop pentru depanare
$data = ['item1', 'item2'];
echo "Înainte de procesarea datelor.\n";
// Oprim execuția pentru a verifica conținutul lui $data
die(var_dump($data));
echo "După procesarea datelor.\n"; // Acest cod nu va fi executat
Mock:
- Obiectiv: Teste unitare, izolare a codului testat.
- Aplicare: Crearea de "stopuri" pentru dependențe (baze de date, API-uri externe, alte clase).
- Instrumente: Framework-uri de testare (PHPUnit) și biblioteci pentru crearea mock-urilor (Mockery).
<?php
// Exemplu de concept mock (fără utilizarea unui framework, pentru ilustrație)
// Simulare de dependență
interface DataFetcher {
public function fetchData(): array;
}
// Clasa1, care depinde de DataFetcher (testată)
class DataProcessor {
private DataFetcher $fetcher;
public function __construct(DataFetcher $fetcher) {
$this->fetcher = $fetcher;
}
public function processData(): array {
$data = $this->fetcher->fetchData();
// Logică de procesare
foreach ($data as &$item) {
$item = strtoupper($item);
}
return $data;
}
}
// Obiect mock pentru DataFetcher în test
class MockDataFetcher implements DataFetcher {
public function fetchData(): array {
// Returnează date predefinite în loc de o solicitare reală
return ['mock_item_1', 'mock_item_2'];
}
}
// În test:
$mockFetcher = new MockDataFetcher();
$processor = new DataProcessor($mockFetcher);
$processed = $processor->processData();
// Verifică dacă $processed conține ['MOCK_ITEM_1', 'MOCK_ITEM_2']
Utilizarea mock-urilor permite testarea logicii clasei A fără a depinde de funcționarea corectă sau disponibilitatea clasei B, de care depinde A. În locul clasei B reale, se folosește un mock care returnează date previzibile sau verifică dacă anumite metode au fost apelate.