Ich bin dabei, das Erstellungszeitverhalten von AutoFixture so anzupassen, dass ich einige abhängige Objekte einrichten kann, nachdem die Eigenschaften des Fixtures generiert und zugewiesen wurden.Kann AutoFixture einen Delegaten zum Zeitpunkt der Objekterstellung ausführen?
Zum Beispiel nehme ich eine Methode, die eine besonders anfertigt User
weil seine IsDeleted
Eigenschaft hat immer für einen bestimmten Satz von Tests falsch sein:
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);
}
(Ich gebe ein ObjectBuilder
zum Test zurück, so dass es kann das Gerät bei Bedarf weiter anpassen.)
Was ich tun möchte ist, diesen Benutzer automatisch mit einer anonymen Sammlung von seiner Id
bei der Erstellung verknüpfen, aber ich kann dies nicht tun, da Id
nicht hat wurde durch die Zeit erzeugt, die ich übergebe der Rückgabewert zurück zum eigentlichen Komponententest. Hier ist die Art von Sache, die ich versuche zu tun:
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);
}
}
Ist so etwas möglich? Oder gibt es vielleicht einen besseren Weg, um mein Ziel zu erreichen, ein anonymer Objektgraph zu erstellen?
Möchten Sie eine bestimmte Instanz für den Benutzertyp haben und den Id-Eigenschaftswert woanders wiederverwenden? –
Hilft das? http://StackOverflow.com/questions/5398258/customizing-autofixture-builder-with-seeded-property/5398653#5398653 –
@MarkSeemann: 'Do()' kann scheinbar ausgeführt werden, bevor das Objekt vollständig ausgefüllt ist, so dass dies nicht ' t arbeiten. Ich kann (und tue) das Beispiel-Lambda manuell ausführen oder mache meine Objekt-Anpassung nach der Erstellung, aber ich würde eine Alternative ähnlich der oben genannten lieben! – ladenedge