2010-07-12 15 views
5

Tengo problemas para encontrar los argumentos adecuados de la opción Arg en RhinoMocks.Rhino Mocks - Uso correcto de Arg <T> .Ref

Estoy intentando simular el método MSIRecordGetString que tiene un parámetro ref Int32. Actualmente tengo:

_Api.RecordGetString(Arg<IntPtr>.Is.Anything, 
        Arg<Int32>.Is.Anything, 
        Arg<StringBuilder>.Is.Anything, 
        ref Arg<Int32>.Ref(???, 0).Dummy); 

¿Alguien me puede decir qué ??? debería/podría ser reemplazado por. Sé que debería ser algo del tipo AbstractConstraint, pero no estoy seguro de qué es válido. Tiene dificultades para encontrar ejemplos de uso adecuado.

Saludos.

Respuesta

9

En realidad estoy acostumbrado a Moq, pero mi comprensión de ese primer argumento es una limitación, pero dado que no le interesa particularmente el valor (lo asumo), podría hacer lo siguiente:

ref Arg<Int32>(Is.Anything(), 0).Dummy 

?

+0

Hola Matt, gracias por la respuesta. Sin embargo, en realidad no estoy seguro de entender los motivos de esta restricción. ¿Por qué es esto diferente de la sintaxis Out que no requiere una restricción abstracta? –

+0

Posible porque los parámetros de salida deben asignarse, mientras que los parámetros de ref no, por lo que la idea de diseño es que los parámetros ref puedan tener un valor preexistente para pasar. ¿Puede restringirlo en este punto? –

+1

@MatthewAbbott Creo que '.Ref' falta entre' Arg 'y' (Is.Anything(), 0) .Dummy'. Entonces debería ser 'ref Arg .Ref (Is.Anything(), 0) .Dummy'. –

Cuestiones relacionadas