Szukam dostosować zachowanie czasu tworzenia AutoFixture tak, że mogę ustawić niektóre obiekty zależne po tym, jak właściwości urządzenia zostały wygenerowane i przypisane.Czy AutoFixture może wykonać delegata w czasie tworzenia obiektu?
Na przykład załóżmy, że mam metodę, która dostosowuje User
ponieważ jego IsDeleted
nieruchomość zawsze musi być fałszywe dla pewnego zestawu testów:
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);
}
(I ręka ObjectBuilder
powrotem do testu, dlatego może w razie potrzeby dodatkowo dostosować urządzenie.)
Co chcę zrobić, to automatycznie skojarzyć tego użytkownika z kolekcją anonimową przez jego Id
w czasie tworzenia, ale nie mogę tego zrobić tak jak jest, ponieważ Id
nie ma zostały wygenerowane przez czas, który podaję zwracana wartość z powrotem do testu jednostkowego. Oto coś, co próbuję zrobić:
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);
}
}
Czy coś takiego jest możliwe? A może jest lepszy sposób na osiągnięcie mojego celu, jakim jest stworzenie anonimowego wykresu obiektów?
Czy chcesz mieć konkretną instancję dla typu użytkownika i ponownie użyć jej wartości właściwości Id w innym miejscu? –
Czy to pomaga? http://stackoverflow.com/questions/5398258/customizing-autofixture-builder-with-seeded-property/5398653#5398653 –
@MarkSeemann: 'Do()' może najwidoczniej wykonać zanim obiekt zostanie w pełni wypełniony, tak że doesn ' t działa. Mogę (i zrobię) ręcznie wykonać przykład lambda lub post-kreacji personalizacji obiektu, ale chciałbym alternatywy podobnej do powyższej! – ladenedge