2010-07-12 3 views
5

Ich habe Probleme herauszufinden, die richtigen Argumente der Option Arg in RhinoMocks.Rhino Mocks - Korrekte Verwendung von Arg <T> .Ref

Ich versuche, die MSIRecordGetString-Methode zu verspotten, die einen ref Int32-Parameter hat. Zur Zeit habe ich:

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

Kann mir jemand sagen was ??? sollte/könnte ersetzt werden mit. Ich weiß, es sollte etwas vom Typ AbstractConstraint sein, aber ich bin mir nicht sicher, was gültig ist. Schwierigkeiten haben, Beispiele für die richtige Verwendung zu finden.

Prost.

Antwort

9

Ich bin eigentlich an Moq gewöhnt, aber mein Verständnis dieses ersten Arguments ist eine Einschränkung, aber da Sie nicht besonders auf den Wert achten (ich nehme an), könnten Sie Folgendes tun:

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

?

+0

Hallo Matt, danke für die Antwort. Nicht wirklich sicher, aber ich bekomme die Gründe für diese Einschränkung. Warum unterscheidet sich das von der Out-Syntax, die keine abstrakte Einschränkung erfordert? –

+0

Wahrscheinlich, weil out Parameter zugewiesen werden müssen, während ref Parameter nicht, so die Designidee ist, dass Ref-Parameter möglicherweise einen bereits vorhandenen Wert zu übergeben haben. Sie können es an diesem Punkt einschränken? –

+1

@MatthewAbbott Ich denke '.Ref' fehlt zwischen' Arg 'und' (Is.Anything(), 0) .Dummy'. So sollte es 'Ref sein Arg .Ref (Is.Anything(), 0) .Dummy'. –