Question

J'ai précédemment publié une question sur ce lien:

Classe avec une collection imbriquée - Comment puis-je peupler la classe imbriquée?

J'ai besoin de pouvoir faire de même mais avec des cours imbriqués:

ainsi:

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

public class ChildClass
{
   etc...
}

J'ai essayé ceci:

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

Mais cela ne fonctionne pas, des idées? J'utilise Autofixture 2.0.

Était-ce utile?

La solution

Les fonctionnalités autoProperties de AutoFixture n'attribuent que des valeurs aux propriétés écrites. La raison pour laquelle ParentClass.Children n'est pas peuplé, c'est parce qu'il s'agit d'une propriété en lecture seule - AutoFixture n'essaie pas d'attribuer une valeur car elle sait que c'est impossible.

Cependant, en supposant que vous avez déjà une instance de ParentClass, vous pouvez demander à AutoFixture de remplir la collection pour vous:

fixture.AddManyto(parentClass.Children);

Cela peut être encapsulé dans une personnalisation comme celle-ci:

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

Depuis Children est un IList<ChildClass> Vous devrez également fournir un mappage pour cela, sauf si vous utilisez le Personnalisation multiplectorielle:

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

C'est définitivement un comportement que nous considéré en ajoutant à la personnalisation multiplec car il s'avère que ce n'est pas entièrement facile à mettre en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top