rhino-mocks

Usar Rhino Mocks para simular un parámetro de salida, que se crea dentro del método que estoy probando



rhino-mocks (2)

Intentando burlarse del siguiente método:

bool IsLoginValid(LoginViewModel viewModel, out User user);

Intenté esto inicialmente:

dependency<ILoginService>() .Stub(serv => serv.IsLoginValid( Arg<LoginViewModel>.Is.Equal(a_login_viewmodel), out Arg<User>.Is.Anything) .Return(false);

Pero eso falla, ya que es un parámetro de salida. Hice un poco de búsqueda y alteré mi código como tal:

dependency<ILoginService>() .Stub(serv => serv.IsLoginValid( Arg<LoginViewModel>.Is.Equal(a_login_viewmodel), out Arg<User>.Out(new User()).Dummy)) .Return(false);

Eso también falla. Necesito que ''nuevo usuario ()'' sea una especie de argumento ''Cualquier cosa''. Como creo que está esperando una instancia específica.

¿Alguna idea de como solucionar esto? Gracias chicos.


Cambiar la respuesta aceptada (por @Patrick Steele) para que coincida con los nombres de las variables y el espacio en blanco en la pregunta:

.Stub(serv => serv.IsLoginValid( a_login_viewmodel, out temp)).OutRef(new User()) .Return(false);

... luego cambiando la sintaxis (pero no la semántica) a la sintaxis Args fluida:

.Stub(serv => serv.IsLoginValid( Arg<LoginViewModel>.Is.Equal(a_login_viewmodel), out Arg<User>.Out(new User()).Dummy)) .Return(false);

... luego terminamos con la misma sintaxis exacta que el segundo intento del OP, que aparentemente "falla". Personalmente, prefiero el estilo fluido de ''Args'', aunque es un poco más detallado.

TL; DR el segundo intento del OP es semánticamente equivalente a la respuesta aceptada, simplemente usa una sintaxis diferente.


Pruebe la opción "OutRef". Acepta un objeto params [] que define el resultado para cada parámetro de salida. Como solo tienes uno, solo necesitas un resultado. Aquí hay una maqueta rápida de lo que probé que debería funcionar en su situación:

var foo = MockRepository.GenerateStub<IFoo>(); var viewModel = new LoginViewModel(); User temp; foo.Stub(f => f.IsLoginValid(viewModel, out temp)).OutRef(new User()).Return(false); User outparam; Assert.IsFalse(foo.IsLoginValid(viewModel, out outparam));