我之前在此链接上发布了一个问题:
Class with a nested collection - how do I populate the nested class?
我需要能够做同样的事情但是使用嵌套类:
像这样:public class ParentClass
{
public int Value;
public IList<ChildClass> Children;
}
public class ChildClass
{
etc...
}
我试过了:
Fixture.Register(()=>Fixture.CreateMany<ChildClass>();
但这不起作用,有什么想法吗? 我正在使用AutoFixture 2.0。
答案 0 :(得分:4)
AutoFixture的AutoProperties功能仅将值分配给可写属性。 ParentClass.Children
未被填充的原因是因为它是一个只读属性 - AutoFixture不会尝试分配值,因为它知道这是不可能的。
但是,假设您已经有一个ParentClass实例,您可以请求AutoFixture为您填充该集合:
fixture.AddManyto(parentClass.Children);
这可以封装到这样的自定义中:
fixture.Customize<ParentClass>(c => c.Do(pc => fixture.AddManyTo(pc.Children)));
由于Children
是IList<ChildClass>
,您还需要为此提供映射,除非您使用MultipleCustomization:
fixture.Register<IList<ChildClass>>(() => fixture.CreateMany<ChildClass>().ToList());
这绝对是我们considered adding to the MultipleCustomization, but decided to postpone until after release 2.1的一种行为,因为事实证明这种行为并不容易。