如何将Post Build Handler添加到AutoFixture

时间:2014-10-07 13:35:37

标签: c# autofixture

我有一个用例,我希望AutoFixture使用默认方法构建我的对象,但后来我想为它添加一些后处理,因为我需要在构建对象后动态设置某些属性。但是我希望在从特定类型派生的所有对象上进行后处理。有什么办法可以使用AutoFixture吗?

1 个答案:

答案 0 :(得分: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.
    }
}

这样的构建器在注册时处理类型StreetName的所有string属性,无论属性是在哪个类中定义的。如果要定位在从特定基类派生的类上定义的属性,那么您也可以检查pi以获取该信息。

您需要使用Fixture实例注册构建器,例如:

fixture.Customizations.Add(new StreetNameBuilder());