簡體   English   中英

AutoFixture和AutoMoq:覆蓋對象生成行為

[英]AutoFixture & AutoMoq: Overriding object generation behavior

我提議在我們公司使用AutoFixture和AutoFixture.xUnit,並已獲得授權,要求某些對象和字段需要以預期方式格式化的隨機數據。 例如,他們希望PersonName僅使用實際名稱(而不是GUID)填充,而PhoneNumber僅使用看起來像電話號碼的字符串填充。 但是他們不想將數據注釋添加到強制執行此操作的實際對象中,他們只是希望AutoFixture生成的測試數據很漂亮。

我已經處理了ICustomize類,以在一些類上實現貪婪的構造函數行為。 是否有類似的方法可以覆蓋特定對象的數據生成? 要(例如)從列表中提取名稱,還是生成數據以遵循某個正則表達式? (請記住,我實際上無法將這些正則表達式作為模型的屬性添加)

好的,解決了我的問題。

給定類類型的對象生成可以通過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());
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM