如何在JustMock中为属性设置器安排和断言MustBeCalled

时间:2015-04-09 21:17:14

标签: unit-testing justmock

我有一个带有get和set属性的模拟类。我的测试代码调用setter来分配连接字符串值。我的测试代码嘲笑包含该属性的类,并在安排模拟时添加MustBeCalled。

ViewModel代码:

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;
        }
    }
}

测试代码:

//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();似乎应用于getter,而不是setter。因此,当我调用Mock.GetTimesCalled(...)时,它返回0.我需要将MustBeCalled应用于setter而不是getter。我想确保在viewmodel的连接字符串设置时,dataprovider的connectionstring被设置。如何告诉JustMock跟踪被模拟的二传手被调用的次数?

1 个答案:

答案 0 :(得分:1)

使用Mock.ArrangeSet()方法排列Setter,如下所示:

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

您还可以使用Mock.AssertSet()替代ArrangeSet().MustBeCalled()组合。

最后,有Mock.GetTimesSetCalled()方法来获取调用setter的次数。

查看documentation on property mocking示例。

相关问题