Я ищу, чтобы настроить поведение времени создания 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<User> BuildUser(this Fixture f)
{
return f.Build<User>().With(u => u.IsDeleted, false);
}
(сдаю ObjectBuilder
обратно к испытанию, так это можете дополнительно настроить прибор, если это необходимо.)
То, что я хотел бы сделать, автоматически ассоциирует пользователя с анонимной коллекцией по его Id
во время создания, но я не могу сделать это как есть, потому что Id
не имеет был создан к тому моменту, когда я возвращаемое значение возвращается к собственному тесту. Вот что я делаю:
public static ObjectBuilder<User> BuildUserIn(this Fixture f, UserCollection uc)
{
return f.Build<User>()
.With(u => u.IsDeleted, false);
.AfterCreation(u =>
{
var relation = f.Build<UserCollectionMembership>()
.With(ucm => ucm.UserCollectionId, uc.Id)
.With(ucm => ucm.UserId, u.Id)
.CreateAnonymous();
Repository.Install(relation);
}
}
Возможно ли это? Или, может быть, есть лучший способ выполнить мою задачу создания анонимного графа объектов?
Вы хотите иметь конкретный экземпляр для типа пользователя и повторно использовать его значение свойства Id в другом месте? –
Помогает ли это? http://stackoverflow.com/questions/5398258/customizing-autofixture-builder-with-seeded-property/5398653#5398653 –
@MarkSeemann: 'Do()' может, очевидно, выполняться до того, как объект будет полностью заполнен, так что doesn ' т работы. Я могу (и делать) вручную выполнить пример lambda или выполнить настройку моего объекта после создания, но мне бы понравилась альтернатива, подобная предыдущей! – ladenedge