AutoFixture AutoMoq将模拟对象强制转换为接口

时间:2017-04-20 20:43:29

标签: c# unit-testing autofixture automoq

我希望有人能给我一些想法。

我需要创建一个满足以下条件的模拟对象:

  1. 它实现了IEntity接口。
  2. 它使用我在EntityBase中已有的基本实现。
  3. 使用AutoFixture自动生成属性。
  4. 我尝试了几种替代方案,最后我用这段代码结束了:

    
    
    fixture.Customize(new AutoConfiguredMoqCustomization());
    
    fixture.Customize<IEntity>(c => c.FromFactory(
     () => fixture.Create<Mock<EntityBase>>().As<IEntity>().Object));
    &#13;
    &#13;
    &#13;

    但是,我获得了以下例外:

    模拟类型已经通过访问其Object属性进行了初始化。必须在此之前添加接口。 :(

1 个答案:

答案 0 :(得分:3)

您可以使用TypeRelay通过创建IEntity的实例来告诉AutoFixture应该满足EntityBase的请求:

fixture.Customizations.Insert(0, new TypeRelay(typeof(IEntity), typeof(EntityBase)));

现在,每次AutoFixture必须创建IEntity的实例时,它将创建一个EntityBase的实例,反过来,由于AutoConfiguredMoqCustomization,它将由Moq处理

继电器非常方便,内置a few of them。实际上,它们通过relaying对接口和抽象类的请求将整个自动模拟功能启用到模拟库。

相关问题