I submitted a patch for Lambda Constraint and then one for Predicate
Constraint (privately) to Tim.
They only execute the constraint if the passed args are of the correct type.

The predicate constraint use to throw an exception. I changed it to return
false. Which makes more sense to me (and fixes my problem). If the arg type
doesn't match the expected arg type, then the constraint isn't fulfilled. I
don't think it's an exception. 



-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of Stefan Steinegger
Sent: 17 March 2009 17:28
To: Rhino.Mocks
Subject: [RhinoMocks] Re: Order of Arg Constraints relative to actual calls


Sorry to be that late, I was in holiday :-)

Arg is designed to take the arguments type as generic argument. So you
have to use Arg<MessageBase>. But then, you can't use the lamda for
the property constraint.

With the classic property constraint it works:


// Arrange
IServiceBus serviceBus = MockRepository.GenerateStub<IServiceBus>();

serviceBus.Stub(
        x => x.Send(Arg<MessageBase>.Matches(
                Property.Value("Value", 2)
                && Is.TypeOf<Message2>())))
        .Return(2);

serviceBus.Stub(x => x.Send(Arg<Message1>.Is.TypeOf))
        .Return(1);

serviceBus.Expect(
        x => x.Send(Arg<MessageBase>.Matches(
                Property.Value("Value", "Success")
                && Is.TypeOf<Message1>())));

ClassUnderTest cut = new ClassUnderTest(serviceBus);
cut.DoMyThing();

serviceBus.VerifyAllExpectations();



AssertWasCalled also didn't work. I don't know why, probably it does
not consider the constraints correctly.

So there are two separate problems.
- Arg<T> should implicitly constrain for TypeOf<T>, and the lamda will
most probably work.
- AssertWasCalled should probably consider the constraints.

On 6 Mrz., 17:48, Thejuan <[email protected]> wrote:
> It's not my test. It's a guy at work. I just isloated it.
> Below is a method to be tested and it's test.
>
> The problem seems to be when using matches for args into a polymorphic
> method. Rhino seems to (haven't opened the source) loop the
> constraints and cast blindly into the specified type for that
> constraint.
>
> using System;
> using NUnit.Framework;
> using Rhino.Mocks;
>
> namespace RhinoBug
> {
>     [TestFixture]
>     public class Class1
>     {
>
>         [Test]
>         public void Bug()
>         {
>             // Arrange
>             IServiceBus serviceBus =
> MockRepository.GenerateStub<IServiceBus>();
>
>             serviceBus.Stub(x => x.Send(Arg<Message2>.Matches(arg =>
> arg.Value == 2))).Return(2);
>             serviceBus.Stub(x => x.Send
> (Arg<Message1>.Is.TypeOf)).Return(1);
>
>             ClassUnderTest cut = new ClassUnderTest(serviceBus);
>             cut.DoMyThing();
>
>             serviceBus.AssertWasCalled(x => x.Send
> (Arg<Message1>.Matches(arg => arg.Value == "Succes")));
>         }
>
>     }
>
>     public class Message2 : MessageBase
>     {
>         public Message2(int value)
>         {
>             Value = value;
>         }
>
>         public int Value { get; set; }
>     }
>
>     public class Message1 : MessageBase
>     {
>         public string Value;
>         public Message1(string s)
>         {
>             Value = s;
>         }
>     }
>
>     public interface IServiceBus
>     {
>         int Send(MessageBase msg);
>     }
>
>     public class ClassUnderTest
>     {
>         private IServiceBus Bus;
>
>         public ClassUnderTest(IServiceBus bus)
>         {
>             Bus = bus;
>         }
>
>         public void DoMyThing()
>         {
>             if (Bus.Send(new Message1("Try")) == 1)
>             {
>                 if (Bus.Send(new Message2(2)) == 2)
>                 {
>                     Bus.Send(new Message1("Success"));
>                 }
>             }
>         }
>
> }
>
>     public class MessageBase
>     {
>     }
>
> }
>
>



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino.Mocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/RhinoMocks?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to