[C#]使用BOGUS來大量產生假資料
前言
我們平時開發有很多時候,都需要產生假資料,比如說我們要做poc,甚至設計資料庫的時候,需要對table產生資料,或者在後端資料庫還沒完成的時候,可能在web api就要先產生假資料來做ui的部份,還有一種狀況是在TDD開發的時候,為了要做stub的狀況,我們也必須要產生假資料,如果只是新增個兩三筆還可以,但如果要產生大量假資料就很麻煩,接下來就介紹一下,如何使用BOGUS方便的快速產生大量假資料。
導覽
首先用nuget搜尋一下BOGUS,而github連結位置https://github.com/bchavez/Bogus
在此我是直接使用linq pad來示例,為求方便我會把註解說明寫在程式碼裡面,我們先看一下最簡單的使用方式,假設我現在要新增一筆假資料
void Main()
{
var faker = new Faker("en"); //這裡可以指定多國語系,比如-zh_TW,zh_CN....值得注意的是英文最齊全,其餘的語系並不一定會有相對應的名詞
var o = new Order()
{
OrderId = faker.Random.Number(1, 100),
Item = faker.Lorem.Sentence(), //這邊都是Bogus提供的名詞,有非常多種,比如下面是的是產品名稱
OrderName=faker.Commerce.Product(),
Quantity = faker.Random.Number(1, 10)
};
Console.WriteLine(o);
}
class Order
{
public int OrderId { get; set; }
public string Item { get; set; }
public int Quantity { get; set; }
public string OrderName { get; set; }
}
另一種新增假資料的方式
void Main()
{
int orderId=1;
var faker=new Faker<Order>("en")
.RuleFor(u=>u.OrderId,f=>f.Random.Number(1,100))
.RuleFor(u=>u.Item,f=>f.Lorem.Sentence())
.RuleFor(u=>u.Quantity,f=>f.Random.Number(1,10))
.RuleFor(u=>u.OrderName,f=>f.Commerce.Product());
var order= faker.Generate();
Console.WriteLine(order);
}
如果我要新增一仟筆假資料該怎麼做呢
void Main()
{
var faker = new Faker("en");
var orders = new List<Order>();
for (int i = 0; i < 1000; i++)
{
orders.Add(new Order
{
OrderId = i+1,
Item = faker.Lorem.Sentence(),
OrderName = faker.Commerce.Product(),
Quantity = faker.Random.Number(1, 10)
});
}
Console.WriteLine(orders);
}
class Order
{
public int OrderId { get; set; }
public string Item { get; set; }
public int Quantity { get; set; }
public string OrderName { get; set; }
}
如果我需要特別的格式化某些字
void Main()
{
var tel = new Bogus.Randomizer().Replace("04-228#####");
Console.WriteLine(tel);
var bid = new Randomizer().Replace("?1########");
Console.WriteLine(bid);
var token = new Randomizer().Replace("**********");
Console.WriteLine(token);
//#代表數字,?代表英文,*代表有可能是英文也有可能是數字
}
如果我們物件長這樣子,我們其實可以拆開來做,或者乾脆就寫在一起,在此示例是寫在一起的做法。
void Main()
{
var faker = new Faker<Order>("en")
.RuleFor(u => u.OrderId, f => f.Random.Number(1, 100))
.RuleFor(u => u.Item, f => f.Lorem.Sentence())
.RuleFor(u => u.Quantity, f => f.Random.Number(1, 10))
.RuleFor(u => u.OrderName, f => f.Commerce.Product())
.RuleFor(u => u.Customers, f =>
{
return Enumerable.Range(1, 100)
.Select(x => new Customer { UserName = f.Internet.UserName(), Email = f.Internet.Email() }).ToList();
});
var order = faker.Generate();
Console.WriteLine(order);
}
class Order
{
public int OrderId { get; set; }
public string Item { get; set; }
public int Quantity { get; set; }
public string OrderName { get; set; }
public List<Customer> Customers { get; set; }
}
class Customer
{
public string UserName { get; set; }
public string Email { get; set; }
}
介紹一個可以快速產大量假資料的方法給各位,如果需要有任何參考,請直接去github查找囉,如果有任何更好的方式,也再請提供給筆者哦。