2011-09-26 12 views
11

Estoy obviamente confundido: esta es una tarea que he logrado con varios otros frameworks que estamos considerando (NMock, Moq, FakeItEasy). Tengo una llamada a función que me gustaría guardar. La llamada de función tiene un parámetro out (un objeto).Parámetros de salida con RhinoMocks

La llamada de función está en un caso de uso que se llama varias veces dentro del código. El código de llamada entrega los parámetros, incluido un objeto NULL para el parámetro de salida. Me gustaría configurar un parámetro OUT esperado, basado en los otros parámetros proporcionados.

¿Cómo puedo especificar un parámetro INBOUND OUT esperado de NULL, y un parámetro OUTBOUND out esperado de un objeto poblado de la manera que lo esperaba? Lo intenté de seis formas para el domingo, y hasta ahora no he podido recuperar nada, salvo NULL para mi parámetro de salida OUTBOUND.

Respuesta

20

De http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments:

Ref y los argumentos son especiales, ya que también hay que hacer feliz al compilador. Las palabras clave ref y out son obligatorias, y necesita un campo como argumento. Arg no lo decepcionará:

User user; 
if (stubUserRepository.TryGetValue("Ayende", out user)) 
{ 
    //... 
} 
stubUserRepository.Stub(x => 
    x.TryGetValue(
    Arg.Is("Ayende"), 
    out Arg<User>.Out(new User()).Dummy)) 
    .Return(true); 

es obligatorio para el compilador. Arg.Out (new User()) es la parte importante para nosotros, especifica que el argumento out debería devolver el nuevo usuario(). Dummy es solo un campo del tipo especificado Usuario, para hacer feliz al compilador.

+0

Yo no funciona para rhino mocks 3.6 aunque ... –

+0

El enlace ahora obtiene un 404 No encontrado. – jakejgordon

6

En caso de que el uso de repositorio para generar Mock/stub

checkUser = MockRepository.GenerateMock<ICheckUser> 

Puede expectativa de instalación con el parámetro cabo

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

Yo no esto funciona para rinoceronte mocks 3.6 aunque ... –

4

Esta solución es más limpio y funciona bien con burla de Rhino 3.6:

myStub.Stub(x => x.TryGet("Key", out myValue)) 
     .OutRef("value for the out param") 
     .Return(true); 
Cuestiones relacionadas