Search code examples
c#unit-testingmockingmoqbdd

Generate two object of the same mock


I'm using MoQ in C# to do some Unit tests/BDD tests, and I've often the need of generating the same object twice(because it will be potentially used in dictionary). Or something 99% the same but just with a different ID.

Is there a way to "clone" the Mock definition? Or to generate two objects with the same definition?


Solution

  • You should create a helper method that constructs that takes in some parameters to construct the Mock object.

    [Test]
    public void MyTest()
    {
        Mock<ITestObject> myMock = CreateObject(1);
        ITestObject obj = myMock.Object;
    }
    
    private Mock<ITestObject> CreateObject(int id)
    {
        Mock<ITestObject> mock = new Mock<ITestObject>();
        mock.SetupGet(o => o.ID).Returns(id);
        return mock;
    }
    
    private interface ITestObject
    {
        int ID { get; set; }
    }