2012-09-16 21 views
8

Sto costruendo un set di API RESTful e ora sono obbligato a scrivere test di unità per loro. Non sono sicuro di cosa testare effettivamente i test unitari.Test delle API REST utilizzando PHPUnit

Le prove dell'unità devono verificare se la risposta ricevuta dal server è corretta per vari ingressi? In tal caso, è una buona pratica avere un insieme di formati di risposta corretti predefiniti e controllare le risposte contro di essi?

UPDATE

io chiamo questi servizi attraverso CURL e posso sicuramente check codice di stato. La risposta può variare a seconda degli input, quindi dovrei controllare tutte le possibili risposte?

In che modo vengono generalmente eseguiti i test di unità per le API RESTful utilizzando PHPUnit in generale?

risposta

4

Se il livello dati dell'API è sufficientemente astratto, in modo da poter ricevere un output coerente e prevedibile per un determinato input, i test case devono sicuramente includere alcune aspettative di output comuni per un elenco limitato di input Dovrebbero anche verificare eventuali errori casi in cui puoi tamburellare.

Se la tua API non può essere eseguita su un livello dati in uno stato prevedibile (ad esempio, se è collegato a dati in tempo reale o a dati condivisi tra gli sviluppatori), finirai per spendere molto di tempo che fissa i test per modellare correttamente il nuovo stato dei dati. Ciò rende il test delle unità meno prezioso, dal momento che potresti non eseguirle più spesso, e dal momento che non sei mai sicuro se un errore di test sia dovuto a una modifica dei dati oa un cambiamento nella logica del programma. Se questo superi il rischio di non avere test unitari o meno dipenderà dalla situazione individuale (quanto spesso i test si interrompono, quanto è critico il servizio, & ct).

Per quanto riguarda l'utilizzo di PHPUnit per eseguire i test case, non posso rispondere in modo specifico, ma immagino che faresti come notato da @basiljames; eseguire una chiamata contro un determinato endpoint e verificare che la risposta ricevuta corrisponda correttamente alle aspettative. Non è diverso da qualsiasi altro test unitario, tranne per il fatto che possono essere eseguiti un po 'più lentamente.

2

È possibile utilizzare JUnit per i casi di test. Dovrai controllare HTTP Status Code e successivamente il contenuto della risposta per qualsiasi attributo o valore particolare.