4

例如ISomething,一个具有三个属性的接口:string Name以及一些我不希望 AutoFixture 构建的int Count复杂属性(具有循环依赖项等)。ImComplex所以我需要 AutoFixture 来创建一个 MockISomething并按其默认算法设置Name并设置为 null。但是,如果我尝试像这样解决它,我会得到一个例外:CountImComplex

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

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

我应该怎么办?

4

1 回答 1

6

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));
    
于 2015-11-28T20:38:52.037 回答