Also, if you wanted to constrain based on types....

service.Stub(x =>
x.Send(null)).IgnoreArguments().Constraints(Is.TypeOf(typeof(Message2))).Return(2);

If spoken in English would be "when an object of type 'Message2' is passed
into the Send() method, return the value 2

here is the full test:

[Test]
public void Bug()
{
    // Arrange
    IService service = MockRepository.GenerateStub<IService>();

    service.Stub(x =>
x.Send(null)).IgnoreArguments().Constraints(Is.TypeOf(typeof(Message2))).Return(2);
    service.Stub(x =>
x.Send(null)).IgnoreArguments().Constraints(Is.TypeOf(typeof(Message1))).Return(1);

    // Act
    var actual1 = service.Send(new Message1());
    var actual2 = service.Send(new Message2(2));

    // Assert
    Assert.AreEqual(1, actual1);
    Assert.AreEqual(2, actual2);
}

On Fri, Mar 6, 2009 at 8:33 AM, Tim Barcz <[email protected]> wrote:

> I think the stub calls are a bit confusing, here is the code rewritten, and
> passes
>
> [TestFixture]
> public class RhinoBugMaybe
> {
>     [Test]
>     public void Bug()
>     {
>         // Arrange
>         IService service = MockRepository.GenerateStub<IService>();
>
>         var msg1 = new Message1();
>         var msg2 = new Message2(2);
>
>         service.Stub(x => x.Send(msg2)).Return(2);
>         service.Stub(x => x.Send(msg1)).Return(1);
>
>         // Act
>         var actual1 = service.Send(msg1);
>         var actual2 = service.Send(msg2);
>
>         // Assert
>         Assert.AreEqual(1, actual1);
>         Assert.AreEqual(2, actual2);
>     }
>
> }
>
> public class Message2 : MessageBase
> {
>     public Message2(int value)
>     {
>         Value = value;
>     }
>
>     public int Value { get; set; }
> }
>
> public class Message1 : MessageBase
> {
> }
>
> public interface IService
> {
>     int Send(MessageBase msg);
> }
>
> public class MessageBase
> {
> }
>
> On Fri, Mar 6, 2009 at 7:43 AM, Thejuan <[email protected]> wrote:
>
>>
>> Hopefully today is a more fruitful posting day. Can anyone see why
>> this test fails?
>>
>> If i stub a method to return different values based on incoming
>> parameters and then the calls happen in a different order to the
>> stubbing order it fails. (inheritance is involved and i beleive the
>> problem)
>>
>> Heres the test
>>
>> using System;
>> using NUnit.Framework;
>> using Rhino.Mocks;
>>
>> namespace RhinoBug
>> {
>>    [TestFixture]
>>    public class RhinoBugMaybe
>>    {
>>        [Test]
>>        public void Bug()
>>        {
>>            IService service = MockRepository.GenerateStub<IService>
>> ();
>>
>>            service.Stub(x => x.Send(Arg<Message2>.Matches(msg =>
>> msg.Value == 2))).Return(2);
>>            service.Stub(x => x.Send(Arg<Message1>.Is.TypeOf)).Return
>> (1);
>>
>>            Assert.AreEqual(1, service.Send(new Message1()));
>>            Assert.AreEqual(2, service.Send(new Message2(2)));
>>
>>        }
>>
>>    }
>>
>>    public class Message2 : MessageBase
>>    {
>>        public Message2(int value)
>>        {
>>            Value = value;
>>        }
>>
>>        public int Value { get; set; }
>>    }
>>
>>    public class Message1 : MessageBase
>>    {
>>    }
>>
>>    public interface IService
>>    {
>>        int Send(MessageBase msg);
>>    }
>>
>>    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