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
-~----------~----~----~----~------~----~------~--~---