我很努力地使用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