0
votes

I'm currently learning Rhino-mocks and think I'm confusing the line between unit testing and mocking. In my example below, I have a readonly Count() property for which I am trying to test the Get() on (a very contrived example for discussion purpose only). As the comment on the Assert.AreEqual indicates, the result from the Count() property is 2 when it should be 3.

My question is can I use Rhino-mocks to actually stub an object (in this case a readonly property) and test the logic of the get_Count() property of the mock IProduct object?

    public interface IProduct
    {
        int Count { get; }
    }

    public class Product : IProduct
    {
        private int count;
        public int Count
        {
            get { return count + 1; }
        }
    }

    public class TestFixture
    {
        [NUnit.Framework.Test]
        public void TestProduct()
        {
            MockRepository mock = new MockRepository();
            IProduct product = mock.Stub<IProduct>();

            product.Stub(p => p.Count).Return(2);
            mock.ReplayAll();

            Assert.AreEqual(3, product.Count); //Fails - result from product.Count is 2
            mock.VerifyAll();
        }
    }
1
If you are just starting out with mocking, do NOT learn record/replay methodolgy--read up on AAA (arrange-act-assert) syntax, which Rhino does support.Phil Sandler

1 Answers

2
votes

You are mocking out the object you are trying to test. This is fundamentally incorrect--you want to mock (or stub) DEPENDENCIES on the objects you are trying to test.

In the case shown above, you would not use mocking at all.

Also see my comment on AAA syntax.