歡迎光臨
每天分享高質量文章

C#中使用Bogus建立模擬資料

原文:CREATING SAMPLE DATA FOR C#[1]

作者:Bruno Sonnino

譯文:C#中使用Bogus建立模擬資料

譯者: Lamond Lu

背景

在我每次寫技術類博文的時候,經常做的一件事就是建立模擬資料。在每篇博文中,為瞭解釋某些概念,我需要建立許多模擬資料。這是一個我在實際中遇到的問題,因為我需要為我的程式找到一些合適的資料。有些時候,我會從資料庫中找一些資料(Northwind和AdventureWorks都是我的好朋友^.^), 有些時候,我會使用一些現成的Json或者Xml資料,當然有時候我只能自己手動建立一些資料。

當然以上方案都不完美,也都不穩定,所以每次我都需要探索一些新方式來獲取資料(對於學習來說這很好,但是維護起來確是一種災難)。 最後我找到了Bogus, 一個基於C#的簡單資料生成器。

使用Bogus生成模擬資料, 你只需要定義規則並生成資料即可,就是這麼簡單。而且Bogus可以生成固定資料或者變化資料。這樣一旦你拿到了這些資料,你就可以把它們序列化成你想要的格式: json, xml,資料庫或者文字檔案。

生成模擬資料

為了生成模擬資料,我們首先需要針對模擬資料建立對應的物體類。這裡我們可以建立一個命令列程式,並新增一下兩個類。

public class Customer{    public Guid Id { get; set; }    public string Name { get; set; }    public string Address { get; set; }    public string City { get; set; }    public string Country { get; set; }    public string ZipCode { get; set; }    public string Phone { get; set; }    public string Email { get; set; }    public string ContactName { get; set; }    public IEnumerable Orders { get; set; }}
public class Order{    public Guid Id { get; set; }    public DateTime Date { get; set; }    public Decimal OrderValue { get; set; }    public bool Shipped { get; set; }}

在你建立好以上兩個物體類之後,你就可以來新增倉儲來獲取模擬資料了。為了使用Bogus, 你可以使用Nuget將Bogus庫新增到你的專案中。

Install-Package Bogus

下麵我們就可以來新增一個倉儲類來獲取模擬資料了。這裡我們新增一個SampleCustomerRepository類,並加入以下方法。

public IEnumerable GetCustomers(){    Randomizer.Seed = new Random(123456);    var ordergenerator = new Faker()        .RuleFor(o => o.Id, Guid.NewGuid)        .RuleFor(o => o.Date, f => f.Date.Past(3))        .RuleFor(o => o.OrderValue, f => f.Finance.Amount(0, 10000))        .RuleFor(o => o.Shipped, f => f.Random.Bool(0.9f));    var customerGenerator = new Faker()        .RuleFor(c => c.Id, Guid.NewGuid())        .RuleFor(c => c.Name, f => f.Company.CompanyName())        .RuleFor(c => c.Address, f => f.Address.FullAddress())        .RuleFor(c => c.City, f => f.Address.City())        .RuleFor(c => c.Country, f => f.Address.Country())        .RuleFor(c => c.ZipCode, f => f.Address.ZipCode())        .RuleFor(c => c.Phone, f => f.Phone.PhoneNumber())        .RuleFor(c => c.Email, f => f.Internet.Email())        .RuleFor(c => c.ContactName, (f, c) => f.Name.FullName())        .RuleFor(c => c.Orders, f => ordergenerator.Generate(f.Random.Number(10)).ToList());    return customerGenerator.Generate(100);}

這裡的第三行程式碼,我們為Randomizer.Seed屬性指定一個固定的隨機種子,因此每次生成的資料都是一樣的。如果你不希望每次都生成固定的資料,你可以去掉這行程式碼。

這裡我們為訂單和客戶資料的生成定義了規則,然後我們呼叫了Generate方法來生成模擬資料。就是這麼簡單。

如上所見,Bogus提供了許多類來生成資料。例如Company類可以用來生成公司模擬資料,例如公司名稱。你可以使用這些生成的資料作為你程式的模擬資料,這些資料有3種使用場景

單元測試的模擬測試資料設計階段的模擬資料原型的模擬資料

但是我確信,你能發現更多的使用場景。

這裡為了使用這些資料,你可以在Main方法中加入以下程式碼

static void Main(string[] args){    var repository = new SampleCustomerRepository();    var customers = repository.GetCustomers();    Console.WriteLine(JsonConvert.SerializeObject(customers,         Formatting.Indented));}

這裡我們將模擬資料轉換成了Json字串,所以這裡你需要新增對Newtonsoft.Json庫的取用。當你執行程式之後,你會得要以下結果。

如上所見,程式生成了一個顧客的資料集,並附帶了每個顧客的所有訂單資訊。

References

[1] CREATING SAMPLE DATA FOR C#: https://blogs.msmvps.com/bsonnino/2019/04/24/creating-sample-data-for-c/

 

    已同步到看一看
    贊(0)

    分享創造快樂