如何模拟只读属性,该属性的值取决于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具体实现中的一些属性只是委托给Source。像这样。。。

class Example : IExample
{
  IDataTransferObject Source { get; set; }
  string Name { get { return _data.Name; } }
}

我想创建一个IExample的独立mock(独立意味着我不能使用捕获的变量,因为在测试过程中会创建几个IExamplemock实例),并设置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配置为返回mock的子对象的属性值,作为一个属性的值。

谢谢。

您可能会使用:

example.SetupGet(ex => ex.Name).Returns(() => example.Object.Source.Name);

访问属性时将确定要返回的值,该值将取自mock的Source属性的Name属性。

最新更新