如何在 JustMock 中为属性设置者安排和断言 MustBeCall



我有一个模拟类,它有一个具有get和set的属性。我的测试代码调用资源库来分配连接字符串值。我的测试代码模拟包含该属性的类,并在安排模拟时添加 MustBeCall。

视图型号代码:

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

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

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

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

您还可以使用 Mock.AssertSet() 作为ArrangeSet().MustBeCalled()组合的替代方法。

最后,还有Mock.GetTimesSetCalled()方法获取二传手被调用的次数。

有关

示例,请查看有关属性模拟的文档。

最新更新