Moq - доступ к свойствам смоделированного объекта - PullRequest
3 голосов
/ 03 ноября 2010

Например: у меня есть интерфейс со свойством и методом.Метод что-то делает со значением свойства.Как настроить макет для доступа к значению свойства?

interface myInterface
{
    Id{get;set;}
    string ReturnIdAsString();
}

Mock<myInterface> mock = new Mock<myInterface>();
mock.Setup(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString).Returns(**would like to return m.Id here**);

mock.Object.ReturnsIdAsString(); //should return the value in m.Id 

Как настроить ReturnsIdAsString для доступа к свойству Id?

1 Ответ

7 голосов
/ 05 ноября 2010

Вы используете SetupGet для свойств. Поскольку вы издеваетесь над интерфейсом, никакой базовой реализации не будет, и вам придется также настроить метод.

Mock<myInterface> mock = new Mock<myInterface>(){CallBase = true};
mock.SetupGet(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString()).Returns("1");

В качестве альтернативы вы можете заставить метод использовать лямбда-выражение при возврате, если вы собираетесь изменить возвращаемое значение свойства Id.

mock.Setup(m => m.ReturnsIdAsString()).Returns(() => mock.Object.Id.ToString());

Помните, что даже если ваш класс вызывает m.Id = 42, это не изменит Get свойства, хотя вы можете проверить Set.

mock.VerifySet(m => m.Id = 42);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...