2014-10-07 75 views
2

我有一个使用案例,我希望AutoFixture使用默认方法构建我的对象,但随后我想添加一些后处理,因为有一些属性需要设置动态地在对象被建立之后。不过,我希望后处理发生在所有派生自特定类型的对象上。有没有办法使用AutoFixture来做到这一点?如何将后建立处理程序添加到AutoFixture

+3

你可以做到这一点[使用后处理(http://stackoverflow.com/a/21569388)。 – 2014-10-07 14:56:38

回答

0

AutoFixture会自动填充可写属性,因此您无需执行任何操作即可启用该属性。如果您希望以特殊方式处理某些属性,则可以为这些属性定义ISpecimenBuilder,例如,

public class StreetNameBuilder : ISpecimenBuilder 
{ 
    public object Create(object request, ISpecimenContext context) 
    { 
     var pi = request as PropertyInfo; 
     if (pi == null || pi.Name != "StreetName" || pi.PropertyType != typeof(string)) 
      return new NoSpecimen(); 

     return "Baker Street"; // Your custom value goes here. 
    } 
} 

此类助洗剂,注册时,处理类型string的所有StreetName的属性,无论在其类属性被定义。如果要定位从派生自特定基类的类定义的属性,那么您也可以检查pi以获取该信息。

你需要用Fixture实例来注册的建设者,例如像这样:

fixture.Customizations.Add(new StreetNameBuilder()); 
相关问题