Domanda

Ho letto questo: http://martinfowler.com/articles/mocksArentStubs.html I miei concetti su uno stub e un mock sono chiari. Capisco la necessità di strutture di isolamento come moq, RhinoMocks e piace creare un oggetto fittizio. Come prende in giro, partecipare attuale verfication delle aspettative. Ma perché abbiamo bisogno di questi quadri per creare stub. Vorrei piuttosto preferirei stendere uno stub creato mano e utilizzarlo in vari dispositivi.

È stato utile?

Soluzione

Hai provato a usare una libreria come Rhino Mocks per un giorno o due prima di decidere che i mozziconi arrotolate a mano è una scelta migliore?

@chibacity: L'intera idea di biblioteche beffardo è quello di Evitare implementazioni. Se ho solo bisogno di impostare il valore di un singolo immobile, io non voglio creare un intero implementazione di un'interfaccia. Chiamare codice come

MyObj obj = MockRepository.GenerateStub<MyObj>();
obj.MyProperty = 33;

sembra molto più semplice per me. Per non parlare situazioni in cui ho solo bisogno di uno stub stupido per essere passato come parametro in cui non mi interessa quello che succede ad esso (in modo che nessun set up è richiesto).

Questo non significa che non dovrebbe stendere le proprie stub per gli scenari più complessi, ma nella mia esperienza questi casi sono rari.

Il mio consiglio è quello di imparare ad usare una buona biblioteca beffarda (come Rhino) con tutti i suoi piccoli trucchi, la mia scommessa è che imparerete presto ad apprezzare le ragioni della sua esistenza.

Altri suggerimenti

A rigor di termini, no, tu non necessità un quadro di isolamento per creare stub. Infatti, Microsoft ha anche un Stubs quadro che solo genera stub, non prende in giro.

Non ho mai scritto un quadro di isolamento me stesso, ma sembrerebbe che una volta che hai beffardo oggetto sul posto, stub sarebbe un gioco da ragazzi per creare. Questo potrebbe essere il motivo principale che la maggior parte / tutti i framework di isolamento includono oggetti stub.

Per quanto riguarda la tua ultima frase ( "Preferirei preferisco stendere uno stub creato mano e utilizzarlo in vari apparecchi"), hai effettivamente provato che su qualsiasi progetto di considerevoli dimensioni? Certo, forse si ha un'interfaccia con un unico metodo che restituisce un bool annullabile -. Si hanno solo per scrivere tre stub per tale interfaccia, e che non è poi così male

Ma una volta che si inizia a guardare decine di interfacce e classi di stub, diventa semplicemente un casino per tenere traccia di tutti i diversi stub. Se si utilizza ogni stub in diversi test, si può certamente giustificare una stub e mettendo da parte scrittura a mano; ma quando si utilizza una sola particolare stub una o due volte, è molto più facile di tenerlo come uno stub "anonimo" prodotta direttamente dal quadro, per semplicità.

Dopo aver usato quadri beffardo per un po ', ho scoperto che il mio disegno di codice assume un taglio completamente diverso. Questa inclinazione sembra essere diretto più in uno stile di interazione. In altre parole, divento più interessato a messaggi e comportamenti di Stato. I miei oggetti diventano servizi, piuttosto che oggetti stateful come avverrebbe quando si utilizza stub. Con stub io alla fine passando stato intorno ad altri oggetti.

Il problema per me, allora diventa più della creazione di livelli di astrazione. Devo domanda dove qualcosa deve essere interagendo a certi livelli. Questo aiuta con la creazione di quella 'Last Moment responsabile'. Così io alla fine con gli oggetti che hanno i produttori ei consumatori. E tutto il resto è solo canali di messaggi.

Spero che questo aiuta.

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