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.

Schreibe einen Kommentar