Как переманить свойство readonly, значение которого зависит от другого свойства Mock
(Как указано тегами, я использую moq).
У меня есть такой интерфейс:
interface ISource
{
string Name { get; set; }
int Id { get; set; }
}
interface IExample
{
string Name { get; }
ISource Source { get; set; }
}
В моем приложении конкретные экземпляры IExample принимают DTO (IDataTransferObject) в качестве источника. Некоторые свойства конкретной реализации IExample просто делегируются источнику. Как это...
class Example : IExample
{
IDataTransferObject Source { get; set; }
string Name { get { return _data.Name; } }
}
Я хотел бы создать автономный макет IExample (автономный смысл, что я не могу использовать захваченную переменную, потому что в ходе теста будут созданы несколько экземпляров IExample mock) и настроить Mock таким образом, чтобы возвращаемое значение IExample.Name значение IExample.Source.Name. Итак, я хотел бы создать mock что-то вроде этого:
var example = new Mock<IExample>();
example.SetupProperty(ex => ex.Source);
example.SetupGet(ex => ex.Name).Returns(what can I put here to return ex.Source.Name);
По сути, я хочу настроить mock для возврата, как значения одного свойства, значения свойства подобъекта макета.
Спасибо.
Ответы
Ответ 1
Возможно, вы можете использовать:
example.SetupGet(ex => ex.Name).Returns(() => example.Object.Source.Name);
Затем возвращается значение, которое будет возвращено, когда свойство будет доступно, и будет взято из свойства Name
свойства mock Source
.