Mockery è una potente libreria PHP, comunemente utilizzata nei test del software per simulare (mock) o emulare (stub) il comportamento degli oggetti. Permette di isolare il codice in fase di test dalle dipendenze esterne, rendendo i test unitari più semplici e affidabili.
Durante lo sviluppo del software, moduli o classi spesso dipendono l’uno dall’altro. Quando si testa un modulo specifico, il controllo del comportamento dei moduli dipendenti può essere difficile. Ad esempio, il modulo in fase di test potrebbe chiamare un’API esterna, un database o un altro servizio. Eseguire i test in questo caso dipenderebbe dalla disponibilità e dalla stabilità dei componenti esterni, causando difficoltà e riducendo l’accuratezza dei risultati dei test.
Mockery risolve questo problema consentendo agli sviluppatori di simulare il comportamento dei componenti dipendenti. Invece di chiamare l’API esterna reale, è possibile utilizzare Mockery per creare un “mock object” che simula tale API. Questo oggetto restituirà valori predefiniti, rendendo i test indipendenti e prevedibili.
L’utilizzo di Mockery offre numerosi vantaggi per il processo di test:
- Controllo del comportamento delle dipendenze: Mockery consente di definire con precisione il comportamento degli oggetti dipendenti, facilitando il test di casi specifici.
- Isolamento dei test: Mockery aiuta a isolare il codice in fase di test dai componenti esterni, garantendo l’indipendenza dei test.
- Accelerazione dei test: Mockery riduce i tempi di esecuzione dei test eliminando attività che richiedono tempo come la chiamata di API esterne o query al database.
- Miglioramento della copertura dei test: Mockery consente di testare casi difficili o impossibili da testare utilizzando oggetti reali.
Utilizzare Mockery è abbastanza semplice. Innanzitutto, è necessario installare la libreria tramite Composer:
{
"require-dev": {
"mockery/mockery": "1.0.0-alpha1@dev"
}
}
Successivamente, è possibile utilizzare Mockery per simulare una classe o un metodo specifico:
// Simula l'intera classe
$mock = Mockery::mock('path-to-mock-class');
// Simula un metodo specifico
$mock = Mockery::mock('path-to-mock-class[method]');
Mockery offre diverse opzioni per definire il comportamento dell’oggetto mock:
// Definisce il numero di volte in cui chiamare il metodo
$mock->shouldReceive('methodName')->times(3);
// Definisce i parametri di input
$mock->shouldReceive('methodName')->with($arg1, $arg2);
// Definisce il valore di ritorno
$mock->shouldReceive('methodName')->andReturn($value);
In sintesi, Mockery è uno strumento utile per il testing del software, che rende il test del codice sorgente più semplice, rapido e affidabile. L’utilizzo di Mockery consente agli sviluppatori di concentrarsi sulla logica del codice in fase di test senza essere influenzati da fattori esterni.