Как создать IList анонимных классов с помощью AutoFixture - PullRequest
4 голосов
/ 31 марта 2011

Ранее я отправил вопрос по этой ссылке:

Класс с вложенной коллекцией - как мне заполнить вложенный класс?

Мне нужно, чтобы я могсделать то же самое, но с вложенными классами:

примерно так:

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

public class ChildClass
{
   etc...
}

Я пробовал это:

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

Но это не работает, какие-то идеи?Я использую AutoFixture 2.0.

1 Ответ

4 голосов
/ 31 марта 2011

Функции AutoProperties функции AutoFixture присваивают значения только для доступных для записи свойств.Причина, по которой 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 , потому что это оказалось не совсем легко реализовать.

...