使用 自动倒, ,我正在尝试构建匿名实例 Project:

 _f=new Fixture().Customize(new AutoMoqCustomization());
 _p=_f.CreateAnonymous<Project>();

这失败了,原因 Project 公共建筑商的要求 IList<Partner>

public Project(/*.....*/,IList<Partner> partners){
  Guard.AgainstEmpty(partners);
}

堆栈跟踪不是有意义的(至少对我来说)。只是一些反思Yada-Yada:

失败:System.Reflection.targetInvocationException:异常是由调用的目标抛出的。
---- system.argumentException:值不在预期范围内。
在system.runtimemethodhandle._invokeconstructor(iRuntimeThodInfo方法,object [] args,signtaturestruct&签名,runtimetype nekaringType)

因此 - 如何确保自动fuse子通过匿名伙伴集合中的通过以构建它?


这不是错的 IList<Partners>. 。还有另一个称为 Priority. Priority 本身成立 Measure, Measure 持有 IList<Indicator> 和电话 Guard.AgainstEmpty(indicators) 在构造函数中。

因此看起来像这样:

fixture.CreateAnonymous<Foo>(); //kaboom!
public class Foo{
  public Foo(IList<Bar> bars){
    Guard.AgainstEmpty(bars); //just checks count for ienumerable & throws if 0
    Bars=bars;
  }
  public IList<Bar> Bars {get;private set;} //should be readonly collection...
}

public class Fizz{
  public Fizz(Foo foo){
    Foo=foo;
  }
  public Foo{get;private set;}
}

public class Bar{}

施工失败了 Guard.AgainstEmpty 方法。因此 - 问题变成 - 如何确保自动固定在构造foos之前填充酒吧集合中的一些条?

有帮助吗?

解决方案

这有帮助。浏览 来源 通常会有所帮助。

var indicators=_f.CreateMany<Indicator>();
_f.Register<IList<Indicator>>(()=>indicators.ToList());

不过可能有更好的方法。


总体而言,这就是目前的外观:

  _f=new Fixture().Customize(new AutoMoqCustomization());
  var indicators=_f.CreateMany<Indicator>();
  _f.Register<IList<Indicator>>(()=>indicators.ToList());
  var regionName=_f.CreateAnonymous<string>();
  _f.Register<string,Country,bool,Region>((name,country,call)=>
    new Region(regionName,_f.CreateAnonymous<Country>(),true));
  _c.Set(x=>x.Regions,_f.CreateMany<Region>().ToList());
  _f.Register<IList<ManagementBoardEntry>>(()=>
    _f.CreateMany<ManagementBoardEntry>().ToList());
  _f.Register<IList<FinancialInfoEntry>>(()=>
    _f.CreateMany<FinancialInfoEntry>().ToList());
  _f.Register<IList<Partner>>(()=>_f.CreateMany<Partner>().ToList());
  _p=_f.CreateAnonymous<Project>();

不能称其为美丽(欢迎任何重构建议),但是它比手动编写所有内容要好得多。


使用 IList 肯定有一个错误的选择。更糟糕的是 - 我正在使用 IList 也适用于属性。这邀请客户直接使用它们,而不是经过聚合根。

使用时有一个缺点 params. 。不能使用多个(除非我再次缺少一些基础知识)。我正在接收列表作为输入(Excel Sheet dom的一部分),不知道编译时间将有多少元素。

模型真的很新鲜。只是烤制它(因此,我很有可能对那些空虚的检查,将与客户和业务分析师讨论这一点)。

我的策略是将其自由雕塑,并通过单位测试将其推向所需状态。这是我不喜欢严格的TDD的实际原因。它窃取了专注力,迫使我思考细节,而不是太早了。我更喜欢绘制它并完善,直到看起来不错。但这可能是因为我对测试的流利不足。

无论如何 - 谢谢您的精彩提示。我将继续了解有关自动倒的更多信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top