Может ли AutoFixture выполнять делегат во время создания объекта?

Я хочу настроить поведение AutoFixtureво время создания таким образом, чтобы можно было настроить некоторые зависимые объекты после того, как свойства прибора будут сгенерированы и назначены.

Например, предположим, что у меня есть метод, который настраивает User, поскольку его свойство IsDeletedвсегда должно быть ложным для определенного набора тестов:

public class User
{
   public int Id { get; set; }
   public string Name { get; set; }
   public bool IsDeleted { get; set; }
}

public static ObjectBuilder BuildUser(this Fixture f)
{
   return f.Build().With(u => u.IsDeleted, false);
}

(я передаю ObjectBuilderвозвращается к тесту, чтобы при необходимости можно было дополнительно настроить прибор.)

Что я хотел бы сделать, так это автоматически связать этого пользователя с анонимной коллекцией по его Idво время создания, но я не могу сделать это как есть, потому что Id] не был сгенерирован к тому времени, когда я передаю возвращаемое значение обратно в модульный тест. Вот что я пытаюсь сделать:

public static ObjectBuilder BuildUserIn(this Fixture f, UserCollection uc)
{
   return f.Build()
           .With(u => u.IsDeleted, false);
           .AfterCreation(u =>
            {
               var relation = f.Build()
                               .With(ucm => ucm.UserCollectionId, uc.Id)
                               .With(ucm => ucm.UserId, u.Id)
                               .CreateAnonymous();
               Repository.Install(relation);
            }
}

Возможно ли что-то подобное? Или, возможно, есть лучший способ выполнить мою задачу по созданию графа анонимных объектов?

6
задан ladenedge 5 April 2012 в 16:39
поделиться