我有一个Entity
类,它公开了一个只读的Id属性。保存后,该属性通过ORM设置(不再是瞬态)。我想让AutoFixture调用一个方法,在内部为从Entity继承的所有类实例设置Id属性。
有几个自定义应用于灯具,注册创建这些后代中的少数几个,所以我想确保它们先运行。我想理想的情况是允许我在从夹具返回之前对匿名值运行一些修改代码。
例如,当我调用fixture.CreateAnonymous<Order>()
时,会有一些其他自定义(或类似)可以在返回之前修改该Order实例。
此修改不会仅拦截Order
,而是拦截任何Entity
后代。
答案 0 :(得分:2)
在使用扩展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>());
}));
}
}