2012-02-25 38 views
8

Ho un po 'di esperienza con test unitari e mock. Nella mia esperienza limitata, userei i due per testare un livello di servizio, ad esempio, il mocking (stubbing?) Fuori dal database per eliminare le dipendenze e concentrarsi sul test delle unità della logica aziendale.API REST test unità

Ora sto creando un'implementazione dell'API wrapper che utilizzerà i servizi Web RESTful. La struttura del risultato json inviata a me è fuori dalle mie mani, ad esempio: Twitter. Sto semplicemente costruendo il client per interfacciarsi con la loro API. Non sono sicuro su come procedere con l'unit test del risultato JSON. In questo momento sto solo prendendo in giro il risultato della richiesta http con una struttura statica di JSON. Questo assicura che la deserializzazione di JSON per i miei pojos sia corretta, ma sono preoccupato per i cambiamenti API. Cosa succede se la struttura api cambia? Cosa succede se l'API attualmente restituisce "titolo" oggi e "groovy_title" domani? Il mio test unitario non l'avrebbe capito.

Dalla mia comprensione, tuttavia, i test di unità dovrebbero essere rapidi. In precedenza avrei deriso il db e ora sto prendendo in giro http, ma dovrei effettivamente usare l'implementazione concreta http, così mi viene immediatamente notificato un cambio di API? O c'è un modo migliore per affrontare questa situazione?

risposta

4

Continuerò a fare quello che stai facendo e prendere in giro l'interfaccia tra il tuo codice e l'API esterna. Come fai notare, questo non rileva le modifiche nell'API esterna.

È possibile scrivere integrazione test che in realtà vanno al server esterno per verificare le modifiche API. Sospetto che tu abbia separato il codice che fa l'interazione nel proprio server/modulo, così puoi letteralmente eseguire il ping dell'API esterna senza essere ostacolato da più di 1 livello di astrazione nella tua app.

Nota, è possibile creare questi test senza utilizzare il codice dell'app; vale a dire wget o arricciatura e fare qualche analisi sui risultati ...

I problemi con questo sono numerious; la parte superiore della mia testa:

È necessaria una connessione di rete
lento
Il servizio esterno potrebbe essere giù temporaneamente - vale a dire il fallimento potrebbe significare cose diverse.
ecc.