0

我有一个具有获取和设置属性的模拟类。我的测试代码调用 setter 来分配连接字符串值。我的测试代码模拟了包含该属性的类,并在安排模拟时添加了 MustBeCalled。

视图模型代码:

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

我的 Mock.Arrange(...).MustBeCalled(); 似乎适用于 getter,而不是 setter。因此,当我调用 Mock.GetTimesCalled(...) 时,它返回 0。我需要将 MustBeCalled 应用于 setter 而不是 getter。我想确保在设置视图模型的连接字符串时设置数据提供者的连接字符串。我如何告诉 JustMock 跟踪模拟设置器被调用的次数?

4

1 回答 1

1

使用该方法排列设置器Mock.ArrangeSet(),如下所示:

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

您也可以Mock.AssertSet()用作组合的替代品ArrangeSet().MustBeCalled()

最后,还有Mock.GetTimesSetCalled()一种方法可以获取调用 setter 的次数。

查看有关属性模拟的文档以获取示例。

于 2015-04-14T11:32:50.263 回答