unit-testingjustmock

How to arrange and assert MustBeCalled for property setter in JustMock


I have a mocked class with a property that has a get and set. My code under test calls the setter to assign a connection string value. My test code mocks the class that contains the property and I add MustBeCalled when I arrange the mock.

ViewModel Code:

public class ClientViewModel
{
    private readonly IMgmtDataProvider dataProvider;

    public ClientViewModel(IMgmtDataProvider dataProvider)
    {
        this.dataProvider = dataProvider;            
    }
    private string clientConnectionString;
    public string ClientConnectionString
    {
        get { return clientConnectionString; }

        set
        {
            clientConnectionString = value;
            if (dataProvider != null)
                dataProvider.ClientConnectionString = value;
        }
    }
}

Test Code:

//Arrange
const string connectionString = "THIS IS MY CONNECTIONSTRING";
var mockedDataProvider = Mock.Create<IMgmtDataProvider>();
Mock.Arrange(() => mockedDataProvider.ClientConnectionString).MustBeCalled();

//Act
var testViewModel = new ClientViewModel(mockedDataProvider);
testViewModel.ClientConnectionString = connectionString;

//Assert
var callCount = Mock.GetTimesCalled(() => mockedDataProvider.ClientConnectinString);
Assert.IsTrue(callCount > 0);

my Mock.Arrange(...).MustBeCalled(); appears to be applied to the getter, not the setter. So, when I call Mock.GetTimesCalled(...), it returns 0. I need to apply the MustBeCalled to the setter instead of the getter. I want to assure the dataprovider's connectionstring is getting set when the viewmodel's connection string gets set. How do I tell JustMock to track how many times a mocked setter is called?


Solution

  • Setters are arranged using the Mock.ArrangeSet() method, like so:

    Mock.ArrangeSet(() => mockedDataProvider.ClientConnectionString = Arg.AnyString).MustBeCalled();
    ....
    Mock.Assert(mockedDataProvider); // assert all expectations on this mock
    

    You can also use Mock.AssertSet() as an alternative to the ArrangeSet().MustBeCalled() combo.

    And finally, there's the Mock.GetTimesSetCalled() method for getting the number of times that a setter was called.

    Check out the documentation on property mocking for examples.