4

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

带有嵌套集合的类 - 如何填充嵌套类?

我需要能够做同样的事情,但使用嵌套类:

像这样:

public class ParentClass
{
   public int Value;
   public IList<ChildClass> Children;
}

public class ChildClass
{
   etc...
}

我试过这个:

Fixture.Register(()=>Fixture.CreateMany<ChildClass>();

但这不起作用,有什么想法吗?我正在使用 AutoFixture 2.0。

4

1 回答 1

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());

这绝对是我们考虑添加到 MultipleCustomization 的一种行为,但决定推迟到 2.1 版之后,因为事实证明它并不完全容易实现。

于 2011-03-31T16:06:51.780 回答