繁体   English   中英

AutoFixture + AutoMoq:使用排除的属性创建模拟

[英]AutoFixture + AutoMoq: Create mock with excluded property

例如, ISomething是一个具有三个属性的接口: string Nameint Count以及一些我不想建立AutoFixture的复杂属性ImComplex (具有循环依赖等)。 因此,我需要使用AutoFixture来创建一个模拟的ISomething模拟,其NameCount由其默认算法设置,并且ImComplex为null。 但是,如果我试图像这样解决它,我会遇到一个例外:

fixture.Customize(new AutoConfiguredMoqCustomization());
var some = fixture.Build<ISomething>().Without(x=>x.ImComplex).Create<ISomething>();

Ploeh.AutoFixture.ObjectCreationException:装饰的ISpecimenBuilder无法基于以下请求创建标本:RP.Core.IInformationUnit。 如果请求表示接口或抽象类,则可能发生这种情况; 如果是这种情况,请注册一个ISpecimenBuilder,它可以根据请求创建标本。 如果在强类型的Build表达式中发生这种情况,请尝试使用IFactoryComposer方法之一提供工厂。

我该怎么办?

Build将禁用所有自定义项(如方法文档中所述),因此它将无法与AutoConfiguredMoqCustomization一起使用。

如果问题在于该属性具有循环依赖关系,则可以:

  1. 重新考虑您的设计(默认情况下,AutoFixture在找到循环依赖项时会抛出该异常的原因,因为这些通常是设计异味)
  2. 配置AutoFixture以允许循环依赖,直到一定深度

     fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList() .ForEach(b => fixture.Behaviors.Remove(b)); int recursionDepth = 2; fixture.Behaviors.Add(new OmitOnRecursionBehavior(recursionDepth)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM