iList 构造函数参数和自动futerture
-
01-10-2019 - |
题
使用 自动倒, ,我正在尝试构建匿名实例 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的实际原因。它窃取了专注力,迫使我思考细节,而不是太早了。我更喜欢绘制它并完善,直到看起来不错。但这可能是因为我对测试的流利不足。
无论如何 - 谢谢您的精彩提示。我将继续了解有关自动倒的更多信息。