Sto provando a entrare nel test dell'unità per gli ovvi positivi che introduce, e sto provando a scrivere un test unitario per una classe che ho scritto l'altro giorno. (So che questo è l'opposto di TDD, ti prego di sopportare me)Domanda Test PHPUnit - Come testare la mia classe
La mia classe, Image
, viene utilizzata in combinazione con altri per la manipolazione delle immagini.
Image
essenzialmente avvolge una risorsa immagine GD e memorizza i dati insieme ad essa. Ad esempio, un'istanza di Image
conterrà sempre suo stato attuale, cioè la sua nuova larghezza/altezza se ridimensionata, i dati originali di immagini, ecc
La classe Image
contiene inoltre metodi per,
- Creazione stessa da un file, dati di stringa o URL, ad es
$image->loadFromPath()
- Creazione di una nuova risorsa immagine GD dalle proprietà dell'istanza
Image
corrente, ad es. per il ridimensionamento delle immagini per mantenere la trasparenza sfondo, ecc - Clonare la risorsa immagine GD per l'utilizzo nelle classi di manipolazione
Quello che sto lottando con è come test di unità di questa classe correttamente con PHPUnit. Ho letto alcune letture e ho alcune idee contrastanti su come affrontarle e non so cosa sia giusto. Devo,
- scrivere un test per ogni metodo della classe. Ho letto da qualche parte che dovrei testare ogni singolo metodo. Tuttavia, alcuni dei metodi eseguono altri (giustamente, posso aggiungere), quindi avete una catena di dipendenze. Ma ho anche letto che ogni Test unitario dovrebbe essere indipendente dall'altro. Quindi cosa faccio se questo è il caso?
- Scrivere ciascun test come percorso di utilizzo della classe. Ho anche letto da qualche parte che ogni test dovrebbe invece rappresentare 1 percorso/percorso di utilizzo che puoi seguire con la classe. Pertanto, se si copre ogni utilizzo, si otterrà la copertura completa del codice.
Quindi, quale di questi è corretto, se presente?
Conosci la copertura del codice? IMO è più importante eseguire ogni riga di codice almeno una volta piuttosto che creare un test per ogni singolo metodo, che non è sempre necessario per la ragione stessa che hai menzionato. – Franz
+1 per entrare in UnitTests – Gordon
So che la copertura del codice è sì, e che dovresti mirare al 100%, ovvero che ogni riga deve essere eseguita almeno una volta. Quindi è sicuramente meglio scrivere il caso di test in cui ogni test è un'azione eseguita dalla classe piuttosto che ogni test per un metodo specifico? –