Comment créer un ilist de classes anonymes en utilisant AutoFixture
-
14-11-2019 - |
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.
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.