我希望有人能给我一些想法。
我需要创建一个满足以下条件的模拟对象:
我尝试了几种替代方案,最后我用这段代码结束了:
fixture.Customize(new AutoConfiguredMoqCustomization());
fixture.Customize<IEntity>(c => c.FromFactory(
() => fixture.Create<Mock<EntityBase>>().As<IEntity>().Object));
&#13;
但是,我获得了以下例外:
模拟类型已经通过访问其Object属性进行了初始化。必须在此之前添加接口。 :(
答案 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对接口和抽象类的请求将整个自动模拟功能启用到模拟库。