Comment trouver la valeur qui a été transmise à une méthode sur mon interface fictive (Moq ou Rhino Mocks)?

StackOverflow https://stackoverflow.com/questions/1802580

Question

J'utilise Moq - mais je pourrais facilement passer à un autre modèle factice si nécessaire .

J'ai une interface définie:

public interface IBaseEngineManagerImp
{
   void SetClientCallbackSender(IClientCallbackSender clientCallbackSender);
}

Je moque ensuite IBaseEngineManagerImp avec

mockEngineManagerImp = new Mock<IEngineManagerImp>();
EngineManager engineManager = new EngineManager(mockEngineManagerImp.Object);

engineManager appelle ensuite SetClientCallbackSender en transmettant une valeur.

Comment obtenir la valeur transmise à SetClientCallbackSender à partir de mon test unitaire?

(Je souhaite appeler des méthodes sur clientCallbackSender dans le cadre du test)

Était-ce utile?

La solution

vous pouvez utiliser la méthode .Callback sur le modèle, pour appeler n'importe quelle fonction du paramètre qui a été transmise à la méthode SetClientCallbackSender:

mockEngineManagerImp.Setup(x => x.SetClientCallbackSender(It.IsAny<IClientCallbackSender>()))
            .Callback((IClientCallbackSender c) => c.DoSomething());

Autres conseils

Dans rhino, vous utilisez WhenCalled ou GetArgumentsForCallsmadeOn :

Thingy argument;
mock
  .Stub(x => x.SetClientCallbackSender(Arg<IClientCallbackSender>.Is.Anything))
  .WhenCalled(call => argument = (Thingy)call.Arguments[0]);
// act
//...
// assert
Assert.AreEqual(7, argument.X); 

Le problème avec cette implémentation est que vous ne récupérez que le dernier argument. Vous pouvez mieux contrôler cela en utilisant des contraintes d'argument (au lieu de Is.Anything).

ou

// act
//...
// assert
Thingy argument = 
  (Thingy)mock
    .GetArgumentsFormCalsMadeOn(x => x.SetClientCallbackSender(
      Arg<IClientCallbackSender>.Is.Anything))[0][0];

Le problème avec GetArgumentsFormCalsMadeOn est qu’il renvoie un tableau à deux dimensions, une ligne pour chaque appel et une colonne pour chaque argument. Vous devez donc connaître exactement le nombre d'appels effectués par votre unité testée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top