2009-12-23 11 views
6

Estoy escribiendo pruebas de unidad usando RhinoMocks para burlarse, y ahora necesito alguna funcionalidad nueva que no haya usado antes.Uso de activadores de devolución de llamada con RhinoMocks

Me gustaría llamar a una función, que nuevamente llamará a una función asíncrona. Para simular que la función async finaliza y desencadena la devolución de llamada dada con el resultado de la ejecución, supongo que puedo utilizar la funcionalidad de devolución de llamada en RhinoMocks, pero ¿cómo puedo hacer esto?

Básicamente lo que me gustaría hacer es algo como esto:

fakeSomething = MockRepository.GenerateMock<ISomething>(); 
fakeSomething.FictionousFunctionSettingCallback(MyFunctionCalled, MyCallback, theParameterToGiveCallback); 
var myObj = new MyClass(fakeSomething);  
myObj.Foo(); 
// Foo() now fires the function MyFunctionCalled asynchronous, 
// and eventually would trigger some callback 

Así; ¿Existe una verdadera función con la que puedo reemplazar esta "FictionousFunction" para configurar esto? Por favor, pregunte si esto era poco claro ..

Respuesta

12

Sólo especifique usando WhenCalled:

fakeSomething = MockRepository.GenerateMock<ISomething>(); 
fakeSomething 
    .Stub(x => x.Foo()) 
    .WhenCalled(call => /* do whatever you want */); 

por ejemplo, se puede utilizar la propiedad Argumentos del argumento de llamada:

fakeSomething 
    .Stub(x => x.Foo(Arg<int>.Is.Anything)) 
    .WhenCalled(call => 
    { 
    int myArg = (int)call.Arguments[0]; // first arg is an int 
    DoStuff(myArg); 
    }); 

No es asíncrona . Lo más probable es que no lo necesite para que sea asincrónico, de todos modos, le hará la vida más fácil si no lo es.

+0

Gracias! Esto suena como la funcionalidad que estoy buscando. La Navidad me está poniendo al día aquí, así que tengo que esperar unos días antes de que pueda probarlo. En espera de aceptar la respuesta en caso de que tenga algunas preguntas de seguimiento. ¡Gracias de nuevo! – stiank81

+0

Y no, definitivamente no quiero que esto sea asincrónico en mis pruebas. La funcionalidad de la que estoy burlando es asincrónica, pero la simularé de forma sincronizada, por lo que necesito activar otra llamada de función cuando se llame a la función de burla. – stiank81

+0

Finalmente lo probé. ¡Esto era justo lo que necesitaba! Funciona bien, solo necesita agregar .Stub (..) después de fakeSomething. ¡Gracias de nuevo! – stiank81

Cuestiones relacionadas