moq и сопоставление параметров - PullRequest
2 голосов
/ 26 июля 2011

Я борюсь с использованием moq и проверкой параметров, передаваемых в методы mocked-интерфейса. У меня есть код как:

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», все свойства configurationMock (которые были настроены ранее) равны нулю. (если я возьму этот «Path.Combine» в строку, все будет работать нормально). В этом случае «Path.Combine» завершается ошибкой, поскольку он получил нулевые параметры.

Как правильно использовать макеты и проверить, что мой интерфейс вызывается с правильными параметрами.

Спасибо, флорин

1 Ответ

0 голосов
/ 26 июля 2011

Я думаю, вам нужно использовать свойства moq, которые автоматически начнут отслеживать его значение (заглушки).

Вместо:

configurationMock.Setup(t => t.Folder).Returns("Folder");
configurationMock.Setup(t => t.FileName).Returns("FileName");

вы можете использовать

configurationMock.SetupProperty(t => t.Folder, "Folder");
configurationMock.SetupProperty(t => t.FileName, "FileName");

, а затем получите доступ к свойству, как вы:

configurationMock.Object.Folder

Подробнее о свойствах moq можно узнать здесь: http://code.google.com/p/moq/wiki/QuickStart#Properties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...