2010-03-19 2 views
1

Je me moque d'un référentiel dans lequel il devrait y avoir une entité pour le scénario de test. Le dépôt doit retourner cette entité basée sur un identifiant connu et retourner rien quand d'autres ids sont passés dansContraintes d'arguments dans les méthodes RhinoMock

J'ai essayé de faire quelque chose comme ceci:.

_myRepository.Expect(item => item.Find(knownId)).Return(knownEntity); 
_myRepository.Expect(item => item.Find(Arg<Guid>.Is.Anything)).Return(null); 

Il semble cependant la deuxième ligne est Outrepasser la premier et le référentiel renvoie toujours null. Je ne veux pas me moquer de tous les différents ID possibles demandés (ils pourraient aller jusqu'à des centaines) lorsque le scénario de test ne concerne que la valeur d'un ID. Je comprends que je peux changer la deuxième ligne pour être le négatif de la première. Cependant, cela deviendrait de plus en plus difficile (et laid) si le référentiel devait renvoyer plus d'une entité pour un scénario de test.

Répondre

0

Cela a fonctionné pour moi correctement. Je suppose que vous recherchez votre identifiant connu plus d'une fois. Essayez de remplacer les lignes entre guillemets par:

_myRepository.Stub(item => item.Find(knownId)).Return(knownEntity); 
_myRepository.Stub(item => item.Find(Arg<Guid>.Is.Anything)).Return(null); 

et faites-moi savoir si cela résout le problème.

+0

Intéressant. Cela fonctionne si j'utilise Stub. Mais si je le remplace par Expect (dynamique ou statique), ce n'est pas le cas. Quelle est la différence alors? – Khash

+0

La différence est que la valeur par défaut Attend soit que la méthode ne sera exécutée qu'une seule fois, Stub par contre fonctionne toujours. Vous pouvez le modifier pour Expect: '_myRepository.Expect (item => item.Find (knownId)) .Retour (knownEntity) .Repeat.Any();' (ou syntaxe similaire) – Grzenio

+0

Notez également que 'Stub' ne définit que le comportement , il ne définit pas les attentes. Par exemple, si vous voulez faire l'affirmation que votre méthode a été appelée avec certains arguments, vous devrez appeler 'AssertWasCalled (x => x.Find (someId));' à la fin de votre test –

Questions connexes