2010-12-08 2 views
3

Il est difficile d'expliquer ce que je recherche, mais mon exemple devrait le clarifier.Définir une propriété d'un objet dans un Expect.Call

J'ai le code suivant:

var schedule = ScheduleUtil.CreateScheduleDto(user, user); 
Expect.Call(() => _scheduleRepository.Save(schedule)); 

Maintenant, ce que je veux faire est lorsque cet appel Save est fait, la propriété schedule.id doit être réglé sur une autre valeur (1 par exemple).

Je ne veux pas me moquer de l'horaire. Cela peut-il être fait? La méthode Save ne renvoie pas de valeur, ce n'est donc pas une possibilité, mais je souhaite que la planification de l'objet soit modifiée. MISE À JOUR: Un petit exemple clarifiera peut-être exactement ce que je veux.

dire qu'il ya une classe avec une méthode Save:

public void Créer (entité entité) {// entité est enregistrée dans la base de données est mise à jour //entity.id avec l'ID créé dans la base de données }

Ainsi, avant la créer, entity.id est -1, après la créer est> 0.

maintenant, il y a un service qui utilise Créer. Les contrats de code sur cette méthode de service disent qu'avant d'être appelé, l'entité doit avoir un identifiant égal à -1, après avoir été appelée, elle doit avoir un id> 0 (préconditions et postconditions). Donc, ce dont j'ai besoin est quelque chose comme ça: var entity = new Entity(); // id == -1 Expect.Call (() => _instance.Create (entité);
// Maintenant l'entity.id devrait être un nombre aléatoire> 0. C'est ce dont j'ai besoin, pour avoir Rhino Mocks mettre à jour l'identifiant de l'entité à un entier donné. Est-ce possible?

Répondre

3

non Si vous n'êtes pas se moquant de la _scheduleRepository, Rhino Mocks ne sait pas. Pourquoi ne voulez-vous pas se moquer de la _scheduleRepository?

EDIT: Ok, maintenant je vois ce que vous voulez faire Utilisez le « WhenCalled » méthode d'extension pour définir le code à exécuter lorsque Rhino.Mocks intercepte l'appel Quelque chose comme cela devrait fonctionner:..

_scheduleRepository.Expect(s => s.Save(schedule)).WhenCalled(a => ((Schedule) a.Arguments[0]).Id = 1); 
+0

Je me moque de la _scheduleRepository. Mais quand j'appelle Save (calendrier), je veux aussi que Rhino Mocks change l'identifiant de l'horaire. –

+0

J'ai ajouté un petit exemple pour clarifier ce dont j'ai besoin. –

+0

@Lieven Si vous pouvez simuler la variable "_instance" et la méthode "Create" est virtuelle, vous pouvez utiliser l'attente que je montre ci-dessus pour définir l'Id de l'entité à tout ce que vous voulez. Ce n'est pas clair pour moi pourquoi cela ne fonctionnerait pas. – PatrickSteele

Questions connexes