2015-12-15 8 views
5

Nel TDD ci sono due concetti: oggetti falsi e oggetti finti. Questi due concetti sono usati nel caso in cui una classe che vuoi testare stia interagendo con altre classi o oggetti o database ...Oggetti falsi contro oggetti finti

La mia domanda è: qual è la differenza tra i due? e quando posso usare ognuno di loro?

Edit: Ho trovato questa risposta: What's the difference between faking, mocking, and stubbing?

ma io sono ancora confuso circa la differenza tra i due: entrambi creano attuazione delle componenti, con l'attuazione di luce per un falso. Ma cosa intendono con "implementazione chiara" di "scorciatoia" in caso di un falso? E qual è la differenza tra come funziona un oggetto Mock e l'oggetto reale funziona?

+4

Possibile duplicato di [Qual è la differenza tra falso, beffardo e stub?] (Http://stackoverflow.com/questions/346372/whats-the-difference- between betweenfake-mocking-and-stubbing) – gmiley

+0

[ questa risposta] (http://stackoverflow.com/questions/2536551/rhino-mocks-difference-between-generatestubt-generatemockt/2536570#2536570) potrebbe far luce sulla differenza –

risposta

1

Un'implementazione falsa per un DataSet, ad esempio, restituirebbe semplicemente un set di dati statici. Una simulazione sarebbe praticamente un'implementazione completa che sarebbe in grado di generare varie serie di dati a seconda dell'input. Se si stesse prendendo in giro il proprio livello dati, si sarebbe in grado di eseguire i propri oggetti comando con la simulazione e sarebbe abbastanza robusto da restituire i dati con un'istruzione "valida" o generare eccezioni con un'istruzione non valida. Tutto senza realmente connettersi a un database o un file.

Per quanto riguarda le differenze tra il mock e il real, di solito quando prendi in giro una classe, crei un oggetto factory che, per impostazione predefinita, restituisce l'oggetto reale, ma quando scrivi i test, puoi dire di restituire un specifica classe di simulazione. La classe di simulazione implementa le stesse interfacce dell'oggetto reale oppure utilizza una classe wrapper che imita la classe reale sottostante, ma consente l'iniezione di dipendenza per le parti critiche per generare dati senza effettuare le chiamate esterne.

+0

Quindi stai dicendo la differenza tra finto e falso è che "finto" si sta propendendo per una piena implementazione? Puoi nominare un riferimento per questo? –