Using Rhino Mocks

Testing Rhino Mocks today for use in unit tests.

IAdder.cs

using System;

namespace TestAdderLib
{
    public interface IAdder
    {
        int AddTwoNums(int a, int b);
    }
}

Adder.cs

using System;
using System.Threading;

namespace TestAdderLib
{
    public class Adder : IAdder
    {
        public int AddTwoNums(int a, int b)
        {
            Thread.Sleep(1000);
            return a + b;
        }
    }
}

TestCalculatorWithRhino.cs

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Calculator;
using TestAdderLib;
using Rhino.Mocks;

namespace TestCalculatorWithRhino
{
    internal class ManuallyCodedAdderStub : IAdder
    {
        public int AddTwoNums(int a, int b)
        {
            int result = a + b;
            return result;
        }
    }


    [TestClass]
    public class TestCalculator
    {
        [TestMethod]
        public void TestCalculatorDirectly()
        {
            CalculatorV1 c = new CalculatorV1();
            Assert.AreEqual(2, c.Add(1, 1));
            Assert.AreEqual(5, c.Add(2, 3));
        }

        [TestMethod]
        public void TestCalculatorWithManualAdderStub()
        {
            var adderStub = new ManuallyCodedAdderStub();
            CalculatorV1 c = new CalculatorV1();
            c.myAdder = adderStub;
            Assert.AreEqual(2, c.Add(1, 1));
            Assert.AreEqual(5, c.Add(2, 3));
        }

        [TestMethod]
        public void TestCalculatorWithGeneratedAdderStub()
        {
            MockRepository mocks = new MockRepository();
            IAdder mockedAdderStub = mocks.DynamicMock<IAdder>();
            using (mocks.Record())
            {
                mockedAdderStub.AddTwoNums(1, 1);
                LastCall.Return(2);

                mockedAdderStub.AddTwoNums(2, 3);
                LastCall.Return(5);
            }

            CalculatorV1 c = new CalculatorV1();
            c.myAdder = mockedAdderStub;
            Assert.AreEqual(2, c.Add(1, 1));
            Assert.AreEqual(5, c.Add(2, 3));
        }

    }
}