我很努力地使用moq并验证传递给模拟接口方法的参数。我有这样一个代码:moq和参数匹配
MockRepository mockRepository = new MockRepository(MockBehavior.Default);
Mock<IConfigurationUpdater> workerInstanceMock = mockRepository.Create<IConfigurationUpdater>();
Mock<IConfiguration> configurationMock = mockRepository.Create<IConfiguration>();
configurationMock.Setup(t => t.Folder).Returns("Folder");
configurationMock.Setup(t => t.FileName).Returns("FileName");
workerInstanceMock
.Setup(
x => x.DoSomeWork(
It.Is<string>(
t => t == Path.Combine(configurationMock.Object.Folder, configurationMock.Object.FileName))))
.Verifiable("DoSomeWork not properly called");
mockRepository.VerifyAll();
的问题是,为内“It.Is”,所产生的拉姆达expresion configurationMock的所有特性(这是先前设定)都为空。 (如果我将这个“Path.Combine”放入一个字符串中,它将会工作得很好)。 在这种情况下,“Path.Combine”失败,因为它收到空参数。
我应该如何正确使用mocks并验证我的接口是否使用正确的参数进行调用。
感谢, 林
备注只有使用Path.Combine才能获得此行为,因为它看起来在另一个上下文中运行了lamba表达式。使用“It.Is(t => t == savConfigurationMock.Object.LiveUpdateFolder +”\\“+ savConfigurationMock.Object.LiveUpdateMergeConfigFile)”或将其放在属性中仅用于文件。 –
florin