2010-05-17 7 views
1

J'essaie d'utiliser le style moqueur couramment de Rhino.Mocks et ont le code suivant qui fonctionne sur un objet IDictionary maquette appelé 'usines':Rhino Mocks - Mocking Courant - Expect.Call question

With.Mocks(_Repository).Expecting(() => 
     { 
      Expect.Call(() => factories.ContainsKey(Arg<String>.Is.Anything)); 
      LastCall.Return(false); 

      Expect.Call(() => factories.Add(Arg<String>.Is.Anything, Arg<Object>.Is.Anything)); 
     }).Verify(() => 
     { 
      _Service = new ObjectRequestService(factories); 
      _Service.RegisterObjectFactory(Valid_Factory_Key, factory); 
     }); 

Maintenant, la seule façon dont j'ai pu définir la valeur de retour de l'appel ContainsKey est d'utiliser LastCall.Return (true) sur la ligne suivante.

Je suis sûr que je mélange des styles ici comme Expect.Call() a une méthode .Return (Expect.Action) mais je ne peux pas comprendre comment je suis supposé l'utiliser correctement pour retourner une valeur booléenne ?

Quelqu'un peut-il aider? J'espère que la question est assez claire - laissez-moi savoir si quelqu'un a besoin de plus d'infos!

Cheers, Ben

Répondre

3

je crois que la ligne suivante vous donnera voulez que vous voulez:

Expect.Call(factories.ContainsKey(Arg<string>.Is.Anything)).Return(false); 
+0

Salut Jakob, Merci pour votre réponse! Oui je pourrais légèrement modifier mon test pour supprimer l'expression lambda et cela me permet de spécifier une valeur de retour booléenne! Je suis toujours curieux de savoir comment la méthode .Return (Expect.Action) est supposée fonctionner, d'autant plus que j'utilise Lambda tout au long de mes tests! Il semblerait que je devrais pouvoir spécifier une valeur de retour et utiliser un lambda, à moins que je ne comprenne complètement quelque chose ... –

+0

Salut Ben, Vous devriez seulement utiliser un délégué/lambda dans Expect.Call quand la fonction simulée renvoie void. Cela n'a pas de sens d'utiliser l'expression lamda et .Return (Expect.Action) ensemble. Le .Return (Expect.Action) apparaît parce que l'expression lambda est de type Expect.Action de la même manière que le .Return (bool) apparaît lorsque vous utilisez la syntaxe que j'ai utilisée pour Expect.Call. –

+0

Ah ok, ça a plus de sens! Merci pour votre aide Jakob. –

Questions connexes