1

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

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

  1. 它实现了接口 IEntity。
  2. 它使用我在 EntityBase 中已有的基本实现。
  3. 这些属性是使用 AutoFixture 自动生成的。

我尝试了几种替代方法,并以以下代码结束:

fixture.Customize(new AutoConfiguredMoqCustomization());

fixture.Customize<IEntity>(c => c.FromFactory(
     () => fixture.Create<Mock<EntityBase>>().As<IEntity>().Object));

但是,我得到以下异常:

Mock 类型已经通过访问它的 Object 属性进行了初始化。添加接口必须在此之前完成。:(

4

1 回答 1

3

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

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

现在,每次 AutoFixture 必须创建 的实例时IEntity,它都会创建一个实例EntityBase,反过来,由于AutoConfiguredMoqCustomization.

继电器非常方便,其中有一些是内置的。事实上,它们通过将接口和抽象类的请求中继到模拟库来启用整个自动模拟功能。

于 2017-04-21T09:03:33.110 回答