2009-06-03 8 views
5

J'essaie d'utiliser la classe MoqAutoMocker fournie avec StructureMap et je ne trouve aucun exemple de la façon dont il devrait être utilisé. Tout ce que je dois faire est le example at the StructureMap site that uses RhinoMocks. Ce que j'essaie de faire est d'obtenir une référence à l'une de mes dépendances auto-simulées/injectées en utilisant la méthode Get. Selon ce lien ci-dessus, je devrais être en mesure de faire quelque chose comme çaComment utiliser le MoqAutoMocker fourni avec StructureMap 2.5.3?

// This retrieves the mock object for IMockedService 
    autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go()); 

Notez comment vous pouvez utiliser AssertWasCalled, qui inidcates que la fonction Get renvoie une référence à l'objet RhinoMocks Mock? Ce même morceau de code ne fonctionne pas pour moi quand j'utilise le MoqAutoMocker.

J'ai un SignInController de classe qui dépend d'un ISecurityService dans le constructeur. Utilisation de la MoqAutoMocker comme le RhinoAutoMocker est utilisé dans l'exemple, je pense que je devrais être en mesure de le faire ...

var autoMocker = new MoqAutoMocker<SignInController>(); 
autoMocker.Get<ISecurityService>().Setup(ss => ss.ValidateLogin 
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

Mais le problème est que je ne me l'accès à la méthode de configuration. Dans ce cas, l'appel à autoMocker.Get semble renvoyer une instance de ISecurityService et non Mock <ISecurityService>

Est-ce que quelqu'un a utilisé avec succès MoqAutoMocker de cette façon? Est-ce que je le fais juste mal?

+0

J'ai le même problème. Avez-vous compris? – Sunit

Répondre

10

J'ai récemment rencontré un problème simillar. Il semble que la solution est de faire quelque chose comme ceci:

var autoMocker = new MoqAutoMocker<SignInController>(); 
var mock = autoMocker.Get<ISecurityService>(); 
Mock.Get(mock).Setup(ss => ss.ValidateLogin 
(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

J'ai également posté un exemple plus long sur mon blog: Setting Expectations With StructureMap’s MoqAutoMocker.

+0

Vous rock. Cela a fonctionné pour moi. J'avais environ abandonné l'utilisation de l'AutoMocker jusqu'à ce que je l'ai vu. Merci! – JamieGaines

+0

@JoelAbrahamsson - lien URL vers ce blog, des erreurs. –

+0

J'ai écrit un [article de blog] (http://evolutionarydeveloper.blogspot.co.uk/2012/10/automock-with-structuremap-and-moq.html) sur le sujet qui utilise 'Mock.Get' enveloppé dans une classe de base pratique. – Nick

1

autoMocker.Get<ISecurityService>()
retournera ISecurityService et vous ne pouvez pas installer sur lui. En revanche, Mock.Get(mock)
va retourner Moq.Mock, alors vous pouvez installer sur elle.

Questions connexes