如何使用AutoFixture创建一个匿名类的IList

时间:2011-03-31 13:30:34

标签: c# autofixture

我之前在此链接上发布了一个问题:

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。

1 个答案:

答案 0 :(得分:4)

AutoFixture的AutoProperties功能仅将值分配给可写属性。 ParentClass.Children未被填充的原因是因为它是一个只读属性 - AutoFixture不会尝试分配值,因为它知道这是不可能的。

但是,假设您已经有一个ParentClass实例,您可以请求AutoFixture为您填充该集合:

fixture.AddManyto(parentClass.Children);

这可以封装到这样的自定义中:

fixture.Customize<ParentClass>(c => c.Do(pc => fixture.AddManyTo(pc.Children)));

由于ChildrenIList<ChildClass>,您还需要为此提供映射,除非您使用MultipleCustomization

fixture.Register<IList<ChildClass>>(() => fixture.CreateMany<ChildClass>().ToList());

这绝对是我们considered adding to the MultipleCustomization, but decided to postpone until after release 2.1的一种行为,因为事实证明这种行为并不容易。