如何将生成后处理程序添加到AutoFixture

本文关键字:程序 添加 AutoFixture 后处理 | 更新日期: 2023-09-27 18:25:45

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

如何将生成后处理程序添加到AutoFixture

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());