Ich möchte eine Funktion stub, die 2 boolesche Parameter erhalten. Der erste ist erforderlich und der zweite ist optional. Wenn ich versuche, Arg.Is.Anyhing an die erste, aber ohne Informationen für die Sekunde zu senden, erhalte ich einen Fehler:Optionale Parameter mit einem Stub in RhinoMock
System.InvalidOperationException: Bei der Verwendung von Arg müssen alle Argumente mit Arg.Is, Arg.Text definiert werden , Arg.List, Arg.Ref oder Arg.Out. 2 Argumente erwartet, 1 wurden definiert. Hier
ist eine Probe meiner Klasse Stub:
public interface IOptionalParameterTester
{
bool IsValid(bool mustCheck, bool checkInDatabase = true);
}
public class OptionalParameterTester : IOptionalParameterTester
{
public bool IsValid(bool mustCheck, bool checkInDatabase = true)
{
if (checkInDatabase)
return true;
else
return false;
}
}
Und hier ist eine Probe des Tests:
[Test]
public void ValidateProducerTest()
{
IOptionalParameterTester optionalParameter = MockRepository.GenerateStub<IOptionalParameterTester>();
optionalParameter.Stub(x => x.IsValid(Arg<bool>.Is.Anything)).Return(true);
}
In diesem Fall, wenn ich den Test ohne Fehler übergeben möchten , Ich muss die gleiche Information definieren, die für die erste (Arg.Is.Anything) oder einen bestimmten booleschen Wert wie wahr oder falsch.
Wenn ich etwas anderes als Arg.Is.Anything für den ersten Parameter eingestellt habe, habe ich keinen Fehler.
Ist es ein Fehler?
Kann ich in RhinoMock eine Option einrichten, damit für jeden optionalen Parameter kein Wert definiert werden muss?
Wenn es keine Einrichtung gibt, gibt es eine bessere Lösung für diesen Fall (Best Practice, Pattern, etc.)?
Vielen Dank.
Als Referenz http://stackoverflow.com/questions/6669623/c-sharp-mocking-framework-that-supports-optional-parameters-and-net-4-0 –
Thanx für die Informationen. Ich liebe Moq, aber das Projekt, in dem ich zurzeit arbeite, ist RhinoMock. – Samuel