我有一组嵌套相当深的数据访问类。
要构建其中的5个列表,AutoFixture需要2分钟以上的时间。每个单元测试需要2分钟才能完成。
如果我是手工编写代码,那么我只会编写所需的代码,这样可以更快地进行初始化。有没有一种方法可以告诉AutoFixture仅执行某些属性,以便它不会花时间在我不需要的结构区域上?
例如:
public class OfficeBuilding
{
public List<Office> Offices {get; set;}
}
public class Office
{
public List<PhoneBook> YellowPages {get; set;}
public List<PhoneBook> WhitePages {get; set;}
}
public class PhoneBook
{
public List<Person> AllContacts {get; set;}
public List<Person> LocalContacts {get; set;}
}
public class Person
{
public int ID { get; set; }
public string FirstName { get; set;}
public string LastName { get; set;}
public DateTime DateOfBirth { get; set; }
public char Gender { get; set; }
public List<Address> Addresses {get; set;}
}
public class Addresses
{
public string Address1 { get; set; }
public string Address2 { get; set; }
}
是否可以告诉AutoFixture为
OfficeBuilding.Offices.YellowPages.LocalContacts
创建值,但不打扰OfficeBuilding.Offices.YellowPages.AllContacts
? 最佳答案
一种选择是创建一个自定义,该自定义忽略特定名称的属性:
internal class PropertyNameOmitter : ISpecimenBuilder
{
private readonly IEnumerable<string> names;
internal PropertyNameOmitter(params string[] names)
{
this.names = names;
}
public object Create(object request, ISpecimenContext context)
{
var propInfo = request as PropertyInfo;
if (propInfo != null && names.Contains(propInfo.Name))
return new OmitSpecimen();
return new NoSpecimen(request);
}
}
您可以按以下方式使用它:
var fixture = new Fixture();
fixture.Customizations.Add(
new PropertyNameOmitter("AllContacts"));
var sut = fixture.Create<OfficeBuilding>();
// -> The 'AllContacts' property should be omitted now.
也可以看看:
关于c# - 如何指示AutoFixture不要麻烦填写某些属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18346803/