I test automatici sono fondamentali per la qualità del software, ma iniziare può sembrare complicato. In PHP, PHPUnit è lo standard de facto per i test. Ecco una guida pratica per iniziare con i test automatici in PHP, da zero a una suite di test funzionante.

Cos'è PHPUnit

PHPUnit è il framework di testing più utilizzato in PHP. Permette di scrivere e eseguire test automatici per verificare che il codice funzioni correttamente. PHPUnit supporta unit test, test funzionali e test di integrazione.

Installazione

Installa PHPUnit tramite Composer:

composer require --dev phpunit/phpunit

Crea un file phpunit.xml nella root del progetto per configurare PHPUnit.

Tipi di test

1. Unit Test

Gli unit test verificano singole unità di codice (funzioni, metodi) in isolamento. Sono veloci da eseguire e dovrebbero essere la maggior parte dei tuoi test.

Esempio: testare una funzione che calcola il totale di un ordine, verificando che sommi correttamente i prezzi.

2. Test Funzionali

I test funzionali verificano che le funzionalità complete funzionino correttamente. Testano l'interazione tra più componenti.

Esempio: testare che un utente possa completare un ordine dall'inizio alla fine, verificando che tutti i passaggi funzionino insieme.

3. Test di Integrazione

I test di integrazione verificano che diversi moduli del sistema funzionino insieme correttamente.

Scrivere il primo test

Un test PHPUnit è una classe che estende PHPUnit\Framework\TestCase. Ogni metodo che inizia con "test" è un test.

Esempio base:

<?php
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAdd()
    {
        $calculator = new Calculator();
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
    }
}

Assertions comuni

PHPUnit offre molte assertion per verificare risultati:

  • $this->assertEquals($expected, $actual) – verifica uguaglianza
  • $this->assertTrue($condition) – verifica che sia true
  • $this->assertFalse($condition) – verifica che sia false
  • $this->assertNull($value) – verifica che sia null
  • $this->assertContains($needle, $haystack) – verifica presenza in array

Test in Yii2

Yii2 include supporto per test tramite Codeception, che usa PHPUnit sotto il cofano. Yii2 offre anche test helper specifici per testare applicazioni Yii2.

Per iniziare con Yii2:

  1. Installa Codeception: composer require --dev codeception/codeception
  2. Inizializza: php vendor/bin/codecept bootstrap
  3. Crea test: php vendor/bin/codecept generate:test unit MyTest

Best practice

1. Testa comportamento, non implementazione

I test dovrebbero verificare che il codice faccia quello che deve fare, non come lo fa. Se cambi implementazione ma il comportamento resta uguale, i test non dovrebbero rompersi.

2. Un test, una cosa

Ogni test dovrebbe verificare una sola cosa. Test semplici sono più facili da capire e debuggare quando falliscono.

3. Nomi descrittivi

Usa nomi di test che descrivano cosa stai testando: testCalculateTotalWithDiscount() è meglio di test1().

4. Testa casi limite

Oltre ai casi normali, testa anche casi limite: valori null, array vuoti, numeri negativi, stringhe molto lunghe.

5. Mantieni i test veloci

I test dovrebbero essere veloci da eseguire. Se i test sono lenti, tenderai a non eseguirli spesso. Evita operazioni lente come chiamate a database o API esterne negli unit test (usa mock).

Da dove iniziare

Inizia con:

  1. Funzionalità critiche: testa prima le parti più importanti
  2. Bug passati: scrivi test per bug già trovati per evitare regressioni
  3. Nuove funzionalità: scrivi test per ogni nuova feature

Non serve testare tutto subito. Inizia con poche funzionalità critiche e espandi gradualmente.

Continua a leggere

Hai un progetto in mente?

Raccontami cosa ti serve: ti propongo la soluzione web più adatta alle tue esigenze.

Contattami I miei servizi