3

Entity読み取り専用の Id プロパティを公開するクラスがあります。このプロパティは、保存後に ORM を介して設定されます (一時的ではなくなります)。Entity から継承するクラスのすべてのインスタンスに対して、内部的に Id プロパティを設定するメソッドを AutoFixture に呼び出させたいと考えています。

これらの子孫のいくつかの選択の作成を登録するフィクスチャにいくつかのカスタマイズが適用されているため、それらが最初に実行されることを確認したいと思います。理想的な状況は、匿名の値がフィクスチャから返される前に、何らかの変更コードを実行できるようにすることだと思います。

たとえば、 を呼び出すとfixture.CreateAnonymous<Order>()、その Order インスタンスが返される前に変更できる他のカスタマイズ (など) があります。

この変更は だけOrderではなく、すべてEntityの子孫を傍受します。

4

1 に答える 1

3

After solving this with a custom class that extended Fixture, I took the advice of both Ruben and Mark. I created the same basic solution via an ICustomization that is applied via my existing custom CompositeCustomization. Here is the new customization for setting my entity Ids before instances are returned via CreateAnonymous.

public class SetEntityIdCustomization : ICustomization {
    public void Customize(IFixture fixture) {
        var engine = ((Fixture)fixture).Engine;
        fixture.Customizations.Add(new Postprocessor(
            engine, o => {
                var entity = o as BaseEntity;
                if (entity == null || !entity.IsTransient()) {
                    return;
                }

                entity.SetId(fixture.CreateAnonymous<Guid>());
            }));
    }
}
于 2012-10-31T20:19:53.797 に答える