Spöttische Referenz-Parameter mit RhinoMocks
Ich meinen code, habe ich den folgenden Aufruf:
string proposed=string.Empty;
validator.IsValid(arg0, arg1, ref proposed);
Ich stub der validator in meinem test und wollen, die stub zu ändern, die Inhalte, auf die verwiesen wird proposed
string-variable. Ich habe versucht, den Wert des Arguments in der WhenCalled-Handler, aber das zeigt keine Wirkung.
validatorStub.Stub(x => x.IsValid(arg0, arg1, ref proposed))
.IgnoreArguments()
.WhenCalled(invocation =>
{
invocation.Arguments[2] = "123456";
}).Throw(new ValidationException(string.Empty));
Ist das möglich mit Rhino überhaupt? Leider habe ich keine Möglichkeit, es zu Bearbeiten, validator...
EDIT: Dank @FireAlkazar ich verstanden hatte, dass ich zur besseren Veranschaulichung meiner test-Situation:
Methode Nicht Code:
public class ClassUnderTest
{
public string Arg0{get;set;}
public string Arg1{get;set;}
public IValidator Validator {get;set;}
public bool Validate()
{
string proposal = string.Empty;
try
{
if (Validator.IsValid(Arg0, Arg1, ref proposal)) return true;
}
catch (ValidationException ex)
{
if (!string.IsNullOrEmpty(proposal))
{
//I want to test this section of code
}
}
return false;
}
}
Test-Code:
[TestMethod]
public void Test_Validate_ValidatorProposes_ReturnsTrue()
{
string arg0 = "123456789";
string arg1 = "201208150030551ABC";
string prop = "123456";
ClassUnderTest testInstance = new ClassUnderTest();
testInstance.Arg0 = arg0;
testInstance.Arg1 = arg1;
IValidator validatorStub = MockRepository.GenerateStub<IValidator>();
validatorStub.Stub(x => x.IsValid(Arg<string>.Is.Equal(arg0),
Arg<string>.Is.Equal(arg1),
ref Arg<string>.Ref(Is.Anything(), prop).Dummy))
.Throw(new ValidationException(string.Empty));
testInstance.Validator = validatorStub;
bool actual = testInstance.Validate();
Assert.IsFalse(actual);
}
Immer noch, wenn ich Schritt für Schritt durch diese sehe ich, dass die ValidatorStub wirft die Ausnahme ich erwarte, dass es zu werfen, aber niemals legt die ref-parameter.
EDIT : Dieser Zweig der RhinoMocks mit einer neueren version der Schloss-Kern, der löst das Problem. Der Autor war so freundlich mich darüber zu informieren diese über Google Groups.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dokumentation für diesen Fall Rhino Mocks 3.5 Out " und " Ref " Argumente
Sieht aus wie Sie haben so etwas wie
EDIT:
Hatte eine Untersuchung über Ihren Fall. Endergebnis ist nicht, kann nicht tun, dass in der neuesten version von Rhino Mocks(3.6). Der Grund ist ein bug in der alten version der Burg.DynamycProxy, ist, dass durch mocks.
Beweis:
fix bug: ref & out-parameter nicht empfangen können, wenn die Proxy-Methode wirft eine
dieses Update fügt Zeilen Burg.Core/DynamicProxy/Generatoren/InvocationTypeGenerator.cs wie diese:
Hinzufügen Reflektor für Rhino.Mocks.dll es gibt keine extra-Behandlung für hasByRefArguments Fall(siehe gleiche Datei InvocationTypeGenerator.cs).
ValidatorStub
ist eine Abhängigkeit, die ich will, um auszudrücken, damit ich testen kann meine Klasse im test. Was du getan hast, war die Prüfung der Stub selbst. Ich werde zu aktualisieren, die Frage, um das klar zu machen!