Come si possono prendere in giro le numerose dipendenze necessarie per i test di integrazione?Mocking per test di integrazione
io uso Mockito per il mio test di unità 'puri'. "Puro" in questo caso significa testare una singola classe, prendendo in giro tutte le sue dipendenze. Bellissimo.
Ora vengono i test di integrazione. Diciamo che in questo caso un test di integrazione metterà alla prova qualcosa di simile:
- messaggio viene inserito in una coda
- messaggio è 'trasformato'
- messaggio di risposta viene messo in una coda di risposta
Diciamo anche che l'elaborazione che avviene nel passaggio 2 è roba seria. Si basa su molte interazioni tra database, su più servizi esterni, sul file system, su tutti i tipi di cose. Ci sono anche molti effetti collaterali che il flusso si innesca, quindi non posso semplicemente assicurare che la risposta sia corretta - ho bisogno di verificare gli effetti collaterali.
Ciascuna di queste dipendenze sono avvolti da una sola classe di servizio senza stato, che li rende bello e mockable.
Come sono persone la manipolazione di questo?
mi piacerebbe utilizzare Mockito modo che ho potuto verificare gli effetti collaterali che il suddetto flusso avrà. Tuttavia, la documentazione di Mocktio (e in larga misura la sua implementazione) sembra combattere fortemente contro l'utilizzo in contesti diversi dai test unitari "puri". Ho cercato di seguire questa strada, ma
- è difficile per popolare i dati stub (come c'è un sacco di esso)
- E 'difficile avere Primavera iniettare quei casi sradicate nei miei fagioli
- è difficile per "resettare" i gesti in modo da poter verificare un diverso insieme di interazioni senza cancellare gli stub.
EDIT
So che avrei potuto gestire la questione del database con qualcosa come un'istanza HSQLDB, ma c'è ancora la questione dei servizi esterni. Per la ripetibilità non posso fare affidamento su questi servizi, essendo nello stato che richiedo, ecc. L'unica opzione che vedo è di prenderli in giro.
Whatdaya fare?
Giusto per chiarire, in quanto i test di integrazione possono essere eseguiti in due modi. Sembra che tu intenda test di integrazione, testando che i componenti di connessione funzionino bene insieme (essenzialmente testando le API). Ma a volte l'integrazione si riferisce a end-to-end, quindi non prenderebbe in giro il tuo servizio e in realtà permetteresti di colpire il database. Questo chiarimento può aiutare con la risposta ... Per favore, vedi http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test per ulteriori chiarimenti sui tipi –
si applica davvero a qualsiasi test (integrazione o end-to-end) che richiede molte dipendenze esterne. Ad esempio, potrei sostituire i miei stub di database con un'istanza HSQLDB, ma ho ancora tutti gli altri servizi. Modificherà la domanda un po 'per chiarire .. –
Quindi, come hai risolto il problema beffardo? – Pupsik