3

我有一个Entity公开只读 Id 属性的类。此属性在保存后通过 ORM 设置(不再是瞬态的)。我想让 AutoFixture 调用一个方法,该方法在内部为从 Entity 继承的类的所有实例设置 Id 属性。

有几个自定义项应用于注册这些后代中的少数几个的创建,所以我想确保它们首先运行。我想理想的情况是允许我在从夹具返回之前对匿名值运行一些修改代码。

例如,当我调用 时fixture.CreateAnonymous<Order>(),会有一些其他自定义(或类似的)可以在该 Order 实例返回之前对其进行修改。

这种修改不仅会拦截Order,还会拦截任何Entity后代。

4

1 回答 1

3

在使用扩展 Fixture 的自定义类解决了这个问题后,我接受了 Ruben 和 Mark 的建议。我通过 ICustomization 创建了相同的基本解决方案,该解决方案通过我现有的自定义 CompositeCustomization 应用。这是在通过 CreateAnonymous 返回实例之前设置我的实体 ID 的新自定义。

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 回答