[英]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.