2009-11-12 14 views
36

estoy usando RhinoMocks, que necesitan stub un método, y siempre han devolverlo el tercer parámetro, independientemente de lo que se pasa en:RhinoMocks - stub un método que devuelve un parámetro

_service.Stub(x => x.Method(parm1, parm2, parm3)).Return(parm3); 

Obviamente, no es tan fácil No siempre sé qué van a ser los parms, pero sé que siempre quiero devolver el tercero.

+0

No estoy seguro de si esto es posible. ¿Podría publicar el método que está intentando probar? –

+0

El método devuelve una llamada a otro método desde una clase estática. Básicamente, la llamada busca en la base de datos para ver si el primer parámetro está presente, si no lo está, devuelve el tercer parámetro. – Martin

+0

Esto es un pedazo de pastel con Moq –

Respuesta

65

le puede proporcionar una implementación de un método con el Do() handler:

Func<TypeX,TypeY,TypeZ,TypeZ> returnThird = (x,y,z) => z; 
mock.Expect(x => x.Method(null, null, null)).IgnoreArguments().Do(returnThird); 

Tenga en cuenta que TypeZ aparece dos veces, ya que es a la vez un tipo de argumento de entrada y el tipo de retorno.

+2

Impresionante, esto funcionó a la perfección. – Martin

+1

Esto está usando '.Expect()' en lugar de '.Stub()' como en la pregunta. – ANeves

0

Puede usar el método expect con una devolución de llamada para devolver el valor que está buscando. Lo siguiente devolverá nulo.

_service.Expect(o => o.Method(null, null, null)) 
     .Callback((object parm1, object parm2, object parm3) => { return parm3; }); 

No estoy seguro si puede usar Callback on Stub.

6

Esto funcionó para mí:

 _service 
      .Stub(x => x.Method(Arg<string>.Is.Anything, ...)) 
      .Return(null) // ... or default(T): will be ignored but RhinoMock requires it 
      .WhenCalled(x => 
      { 
       // This will be used as the return value 
       x.ReturnValue = (string) x.Arguments[0]; 
      }); 
Cuestiones relacionadas