例如ISomething
是一个包含三个属性的接口:string Name
和int Count
以及一些复杂的属性ImComplex
(具有循环依赖关系等),我不知道想要AutoFixture建立起来。因此,我需要AutoFixture来创建ISomething
的模拟,其Name
和Count
由其默认算法设置,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方法之一。
我该怎么办?
答案 0 :(得分:5)
Build
停用所有自定义项(如方法文档中所述),因此无法与AutoConfiguredMoqCustomization
一起使用。
如果问题是该属性具有循环依赖性,那么您可以:
配置AutoFixture以允许循环依赖,直到某个深度
fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList()
.ForEach(b => fixture.Behaviors.Remove(b));
int recursionDepth = 2;
fixture.Behaviors.Add(new OmitOnRecursionBehavior(recursionDepth));