Domanda

Groovy è un linguaggio meraviglioso che offre un sacco di scelte diverse.

Nel pensare unit test, quando ha senso utilizzare un Expando oggetto rispetto al "come" operatore con chiusure?

http: //groovy.codehaus. org / Developer + test + con + Maps + e + + Expandos invece + di + Mocks vs http://groovy.codehaus.org/Developer+Testing+using + + Chiusure invece + di + Mocks

Per i casi semplici, il loro uso sembra così simile.

Grazie!

È stato utile?

Soluzione

Come osservato sulla pagina si fa riferimento per quanto riguarda utilizzando chiusure invece che deride, da soli funzionano solo per le interfacce beffardo e solo se tale interfaccia ha un solo metodo. Quindi, se la classe in prova non utilizza un'interfaccia o avete bisogno di prendere in giro più di un singolo metodo è necessario utilizzare sia un Expando o mappa. Preferisco essere coerenti e sempre usare una mappa, il codice mi occupo di rado necessita di oggetti preso in giro con un unico metodo di interfaccia e l'utilizzo di una mappa che non richiede molte più combinazioni di tasti.

interface Foo {
    def someMethod(s)
}

// Closure, this breaks if someOtherMethod() is added to Foo or if Foo is a class
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest(mockMetod as Foo)

// Map
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest([someMethod:mockMethod] as Foo)

Non che ci sia una differenza significativa tra l'uso di una mappa o Expando prendere in giro un oggetto, ma io preferisco una mappa solo per il bel modo è possibile dichiarare una mappa letterale e non c'è bisogno di nuovo di un Expando.

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