Domanda

Molte persone usano Oggetti fittizi, quando sono a scrivere unit test.Che cosa è un Oggetto Mock?Perché ho sempre bisogno di uno?Ho bisogno di un Oggetto Mock Quadro?

È stato utile?

Soluzione

Oggetto Beffardo viene utilizzato per mantenere le dipendenze di unità di test.A volte sarà un test come "SelectPerson" che consente di selezionare una persona dal database e restituire un oggetto di Persona.

Per fare questo, normalmente, è necessario una dipendenza di database, tuttavia con l'oggetto di scherno, è possibile simulare l'interazione con il database con un finto quadro, quindi potrebbe restituire un set di dati che è simile a un restituiti dal database e quindi è possibile testare il codice per assicurarsi che gestisce la traduzione di un set di dati di un oggetto di persona, invece di usarlo per verificare che la connessione al database esistente.

Altri suggerimenti

Diverse persone hanno già risposto di la 'cosa', ma qui ci sono un paio di 'perché' che mi vengono in mente:

  1. Prestazioni

    Perché unit test dovrebbe essere veloce, il test di un componente che interagisce con una rete, un database, o un altro per la cpu risorsa non deve pagare la penale se è fatto uso di finto oggetti.I risparmi si sommano rapidamente.

  2. Collaborazione

    Se si sta scrivendo un ben incapsulato pezzo di il codice che deve interagire con il codice di qualcun altro (che non ha stato ancora scritto, o è in fase di sviluppo in parallelo di un comune scenario), è possibile esercitare il vostro codice con gli oggetti mock una volta un l'interfaccia è stata concordata.Altrimenti il codice non può iniziare a essere testati fino a quando l'altra componente è finito.

Un oggetto di simulazione che permette di testare solo su ciò che si sta scrivendo, e dettagli astratti come l'accesso a una risorsa (un disco, un servizio di rete, ecc).Il mock permette quindi di fingere di essere quella di una risorsa esterna, o di classe o qualsiasi altra cosa.

Non avete davvero bisogno di un mock quadro, basta estendere la classe di funzionalità non si vuole preoccupare di test e verificare la classe di prova è possibile utilizzare il vostro finto invece la cosa reale (passare attraverso un costruttore o setter o qualcosa del genere.

La pratica mostra quando prende in giro sono utili e quando non lo sono.

EDIT:Beffardo risorse è particolarmente importante in modo da non dover fare affidamento su di loro per esistere durante il test, e si può deridere i dettagli di come essi esistono e cosa rispondono (come la simulazione di un FileNotFoundException, o un webservice che manca, o i vari possibili valori di ritorno di un webservice)...il tutto senza rallentare i tempi di accesso coinvolti (beffardo si rivelerà MOLTO più veloce l'accesso a tali risorse in prova).

Ho bisogno di un Oggetto Mock Quadro?

Certamente non.A volte, la scrittura prende in mano può essere abbastanza noioso.Ma per le cose semplici, non è affatto male.L'applicazione del principio di Responsabile Ultimo Momento per un beffardo quadri, si deve solo passare da scritti a mano prende in giro per un quadro quando hai dimostrato a te stesso che la scrittura a mano prende in giro è più problemi che ne vale la pena.

Se sei solo ottenendo a partire beffardo, saltare direttamente in un quadro di andare almeno il doppio della tua curva di apprendimento (si può matrimoniale una curva?).Beffardo quadri farà molto più senso quando hai passato un paio di progetti di scrittura prende in mano.

Oggetto Beffardo è un modo per creare un "virtuale" o deriso oggetto da un'interfaccia astratta di una classe o di classe con i metodi virtuali.Permette di ordinare di avvolgere uno di questi nella vostra definizione per scopi di test.È utile per realizzare un oggetto che viene invocata per un determinato blocco di codice del tuo test.

Un popolare uno che mi piace usare è detto Moq, ma ci sono molti altri come RhinoMock e numerose quelle che non so.

Esso consente di verificare come parte di un progetto interagisce con il resto, senza la costruzione di tutta la cosa e, potenzialmente, manca una parte vitale.

EDIT:Grande esempio da wikipedia:Esso vi permette di testare il codice in anticipo, come un designer di automobili utilizza un manichino di prova per testare il comportamento di un auto durante un incidente.

Un altro uso è che il test contro altre parti del sistema che non sono ancora realizzato.Per esempio, se la classe dipende da qualche altra classe che fa parte di una caratteristica che qualcun altro ci sta lavorando, si può solo chiedere per un quasi completo di interfaccia, il programma di interfaccia e basta prendere in giro i dettagli, come si aspetterebbe loro di lavorare.Quindi, assicurarsi che la tua ipotesi circa l'interfaccia sono stati corretti (sia durante lo sviluppo, o una volta che la funzionalità è completa).

Se non sei un beffardo quadro è utile dipende in parte la lingua del codice che si sta scrivendo.Con un linguaggio statico, è necessario mettere in sforzo supplementare in modo da ingannare il compilatore ad accettare i tuoi oggetti fittizi come un sostituto per la cosa reale.In un dinamicamente tipizzato linguaggio come Python, Ruby, Javascript, di solito si può semplicemente collegare i metodi su oggetti arbitrari o di classe e si passa come parametro -- quindi un quadro sarebbe da aggiungere molto meno valore.

2 raccomandato beffardo quadri .net Unit test sono Typemock Isolatore e Rhino Finto.

Nel seguente link potete vedere una spiegazione da Typemock motivo per cui avete bisogno di un beffardo quadro per i Test di Unità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top