Как переманить свойство 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.