4

我提议在我们公司使用 AutoFixture 和 AutoFixture.xUnit,并且已经得到授权,对于某些对象和字段,他们需要以预期方式格式化的随机数据。例如,他们希望 PersonName 只填充真实的名称(而不是 GUID),而 PhoneNumber 只填充看起来像电话号码的字符串。但是他们不想将数据注释添加到执行此操作的实际对象中,他们只是希望 AutoFixture 生成的测试数据漂亮。

我已经处理了一些 ICustomize 类以在一些类上实现贪婪的构造函数行为。是否有类似的方法来覆盖特定对象的数据生成?(例如)从列表中提取名称,或生成数据以遵循某个正则表达式?(请记住,我实际上不能将这些正则表达式添加为模型上的属性)

4

1 回答 1

2

好的,解决了我的问题。

给定类类型的对象生成可以通过 Fixture.Register 方法完成。您可以创建一个方法来返回您想要覆盖的类型,并且将使用该方法而不是默认值。

为了获得有意义的数据,我只使用了 Faker.Net。

我得到了 Mark 指出的解决方案,并且非常喜欢它用于一般 POJO,但在我的情况下,我的许多对象都具有只能通过构造函数或聚合设置器(如 ChangeContactInfo)设置的属性,所以不幸的是我需要一些东西更有针对性。这是我实现名称和地址生成覆盖的解决方案的示例:

public class CustomObjectGeneration : ICustomization
{
    public void Customize(IFixture fixture)
    {
        fixture.Register(GenerateAddress); 
        fixture.Register(GeneratePersonName);
    }

    private Address GenerateAddress()
    {
        return new Address(Faker.Address.StreetAddress(), Faker.Address.SecondaryAddress(), Faker.Address.City(),
            Faker.Address.ZipCode(), Faker.Address.UsState(), Faker.Address.Country());
    }

    private PersonName GeneratePersonName()
    {

        return new PersonName(Faker.Name.Prefix(), Faker.Name.First(), Faker.Name.First(), Faker.Name.Last(), Faker.Name.Suffix());
    }

}
于 2014-10-08T20:44:46.693 回答