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

4

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

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

我现在需要能够使用嵌套类来做同样的事情:

像这样:

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

public class ChildClass
{
   etc...
}

我尝试了这个:
Fixture.Register(()=>Fixture.CreateMany<ChildClass>();

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

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版本发布之后,因为实现起来并不完全容易。


非常感谢!我设法让它工作了,尽管自定义对我没有起作用。我只使用了注册方法。 - jaffa
1
好的,很好 - 我必须承认我直接在我的回答中编写了上述代码,所以可能会有一些小错误...但是总体思路是正确的 :) - Mark Seemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接