我有一个带有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跟踪被模拟的二传手被调用的次数?
答案 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的次数。