2010-11-26 2 views
0

J'utilise groovy pour créer des classes fictives pour un cas de test. Je crée fondamentalement des objets fictifs où toutes les méthodes retournent la valeur NULL pour que je puisse exécuter mon test.fonte mapper la carte à l'objet avec un constructeur privé dans groovy

J'utilise la syntaxe suivante:

MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory 

Donc ici, je suis en train de remplacer l'instance singleton avec mon usine sur l'objet de faux. Le problème est que le constructeur de MessageFactory se trouve être une méthode privée. Cela me donne une exception d'accès illigal quand je cours le code ci-dessus. Y at-il une distance je peux créer un proxy dans groovy et surmonter le problème du constructeur privé?

Répondre

1

Si vous avez accès à MessageFactory, et sont prêts à le modifier, vous utilisez la solution standard d'injection de dépendance, comme indiqué ici: mock singleton ..Though ce n'est pas particulièrement Groovy.

Sinon, la meilleure solution que j'ai trouvé est de remplacer la méthode (s) sur l'instance singleton lui-même, comme si:

@Singleton 
class Test{ 
    def method(){"Unmocked method called"} 
} 


def test = Test.instance 
test.metaClass.method = {-> null} 

test.method() // Now returns null 

Naturellement, comme un singleton, cette instance ne change pas (au moins en théorie) ... Ainsi, les méthodes de substitution de cette manière sont effectivement globales.

Editer: Ou vous pouvez utiliser GMock, qui prend en charge le moqueur constructeur (entre autres choses).

+0

gmock semble bien merci! – mkoryak

Questions connexes