如何将生成后处理程序添加到AutoFixture
本文关键字:程序 添加 AutoFixture 后处理 | 更新日期: 2023-09-27 18:25:45
我有一个用例,我希望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());