J'ai une classe de proxy de service qui effectue un appel asyn à l'opération de service. J'utilise une méthode de rappel pour renvoyer les résultats à mon modèle de vue.RhinoMocks Méthode de rappel de test
En effectuant des tests fonctionnels du modèle de vue, je peux simuler le proxy de service pour m'assurer que les méthodes sont appelées sur le proxy, mais comment puis-je m'assurer que la méthode de rappel est également appelée? Avec RhinoMocks, je peux tester que les événements sont gérés et que l'événement déclenche des événements sur l'objet simulé, mais comment puis-je tester les rappels?
ViewModel:
public class MyViewModel
{
public void GetDataAsync()
{
// Use DI framework to get the object
IMyServiceClient myServiceClient = IoC.Resolve<IMyServiceClient>();
myServiceClient.GetData(GetDataAsyncCallback);
}
private void GetDataAsyncCallback(Entity entity, ServiceError error)
{
// do something here...
}
}
ServiceProxy:
public class MyService : ClientBase<IMyService>, IMyServiceClient
{
// Constructor
public NertiAdminServiceClient(string endpointConfigurationName, string remoteAddress)
:
base(endpointConfigurationName, remoteAddress)
{
}
// IMyServiceClient member.
public void GetData(Action<Entity, ServiceError> callback)
{
Channel.BeginGetData(EndGetData, callback);
}
private void EndGetData(IAsyncResult result)
{
Action<Entity, ServiceError> callback =
result.AsyncState as Action<Entity, ServiceError>;
ServiceError error;
Entity results = Channel.EndGetData(out error, result);
if (callback != null)
callback(results, error);
}
}
Merci
Pourriez-vous indiquer comment rendre la méthode interne visible pour le projet de test unitaire. merci – joblot
j'ai travaillé comment rendre la méthode interne visible. pourriez-vous s'il vous plaît expliquer ce que Do faire et pourquoi nous avons créé un Stud pour le service. merci – joblot
Ceci est juste un test unitaire pour votre ViewModel. Par conséquent, toutes les dépendances extérieures sont mocked/stubbed. La méthode "Do" indique à Rhino.Mocks d'exécuter un morceau de code spécifique à chaque fois qu'une méthode est appelée. J'ai utilisé "Do" pour que votre ViewModel puisse appeler "GetDataAsync" et reçoive également un rappel - tout cela pendant le test. Tester si le service exécute des rappels est effectué dans le cadre d'un test unitaire de la classe Service. – PatrickSteele