$npx -y skills add kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-bogus-fake-data使用 Bogus 產生擬真假資料的專門技能。當需要產生真實感的姓名、地址、電話、Email、公司資訊等測試資料時使用。涵蓋 Faker 類別、多語言支援、自訂規則、大量資料產生等。 Make sure to use this skill whenever the user mentions Bogus, Faker, fake data, realistic test data, generating names/addresses/emails, or seed data, even if they don't explicitly ask for f
| 1 | # Bogus 假資料產生器 |
| 2 | |
| 3 | ## 套件安裝與設定 |
| 4 | |
| 5 | ### 安裝 Bogus |
| 6 | |
| 7 | ```bash |
| 8 | dotnet add package Bogus |
| 9 | ``` |
| 10 | |
| 11 | ### NuGet 套件資訊 |
| 12 | |
| 13 | | 套件名稱 | 用途 | NuGet 連結 | |
| 14 | | -------- | ---------------- | -------------------------------------------------- | |
| 15 | | `Bogus` | 假資料產生函式庫 | [nuget.org](https://www.nuget.org/packages/Bogus/) | |
| 16 | |
| 17 | **GitHub 儲存庫**:[bchavez/Bogus](https://github.com/bchavez/Bogus) |
| 18 | |
| 19 | --- |
| 20 | |
| 21 | ## 核心概念 |
| 22 | |
| 23 | ### 基本語法結構 |
| 24 | |
| 25 | Bogus 的核心是 `Faker<T>` 類別,使用 `RuleFor` 方法定義屬性的產生規則: |
| 26 | |
| 27 | ```csharp |
| 28 | using Bogus; |
| 29 | |
| 30 | public class Product |
| 31 | { |
| 32 | public int Id { get; set; } |
| 33 | public string Name { get; set; } = string.Empty; |
| 34 | public decimal Price { get; set; } |
| 35 | public string Description { get; set; } = string.Empty; |
| 36 | public DateTime CreatedDate { get; set; } |
| 37 | } |
| 38 | |
| 39 | // 建立產品資料的 Faker |
| 40 | var productFaker = new Faker<Product>() |
| 41 | .RuleFor(p => p.Id, f => f.IndexFaker) |
| 42 | .RuleFor(p => p.Name, f => f.Commerce.ProductName()) |
| 43 | .RuleFor(p => p.Price, f => f.Random.Decimal(10, 1000)) |
| 44 | .RuleFor(p => p.Description, f => f.Lorem.Sentence()) |
| 45 | .RuleFor(p => p.CreatedDate, f => f.Date.Past()); |
| 46 | |
| 47 | // 產生單筆資料 |
| 48 | var product = productFaker.Generate(); |
| 49 | |
| 50 | // 產生多筆資料 |
| 51 | var products = productFaker.Generate(10); |
| 52 | ``` |
| 53 | |
| 54 | ### 內建 DataSet 概覽 |
| 55 | |
| 56 | Bogus 提供豐富的內建 DataSet,每個都專注於特定領域的資料產生: |
| 57 | |
| 58 | #### 個人資訊 (Person DataSet) |
| 59 | |
| 60 | ```csharp |
| 61 | var faker = new Faker(); |
| 62 | |
| 63 | var fullName = faker.Person.FullName; // 完整姓名 |
| 64 | var firstName = faker.Person.FirstName; // 名字 |
| 65 | var lastName = faker.Person.LastName; // 姓氏 |
| 66 | var email = faker.Person.Email; // 電子郵件 |
| 67 | var gender = faker.Person.Gender; // 性別 |
| 68 | var dateOfBirth = faker.Person.DateOfBirth; // 生日 |
| 69 | ``` |
| 70 | |
| 71 | #### 地址資訊 (Address DataSet) |
| 72 | |
| 73 | ```csharp |
| 74 | var fullAddress = faker.Address.FullAddress(); // 完整地址 |
| 75 | var streetAddress = faker.Address.StreetAddress(); // 街道地址 |
| 76 | var city = faker.Address.City(); // 城市 |
| 77 | var state = faker.Address.State(); // 州/省 |
| 78 | var zipCode = faker.Address.ZipCode(); // 郵遞區號 |
| 79 | var country = faker.Address.Country(); // 國家 |
| 80 | var latitude = faker.Address.Latitude(); // 緯度 |
| 81 | var longitude = faker.Address.Longitude(); // 經度 |
| 82 | ``` |
| 83 | |
| 84 | #### 商業資訊 (Company & Commerce DataSet) |
| 85 | |
| 86 | ```csharp |
| 87 | var companyName = faker.Company.CompanyName(); // 公司名稱 |
| 88 | var catchPhrase = faker.Company.CatchPhrase(); // 標語 |
| 89 | var department = faker.Commerce.Department(); // 部門 |
| 90 | var productName = faker.Commerce.ProductName(); // 產品名稱 |
| 91 | var price = faker.Commerce.Price(1, 1000, 2); // 價格(字串格式) |
| 92 | var ean13 = faker.Commerce.Ean13(); // EAN-13 條碼 |
| 93 | ``` |
| 94 | |
| 95 | #### 網路資訊 (Internet DataSet) |
| 96 | |
| 97 | ```csharp |
| 98 | var url = faker.Internet.Url(); // URL |
| 99 | var domainName = faker.Internet.DomainName(); // 網域名稱 |
| 100 | var ipAddress = faker.Internet.Ip(); // IPv4 地址 |
| 101 | var ipv6 = faker.Internet.Ipv6(); // IPv6 地址 |
| 102 | var userName = faker.Internet.UserName(); // 使用者名稱 |
| 103 | var password = faker.Internet.Password(); // 密碼 |
| 104 | var email = faker.Internet.Email(); // 電子郵件 |
| 105 | ``` |
| 106 | |
| 107 | #### 金融資訊 (Finance DataSet) |
| 108 | |
| 109 | ```csharp |
| 110 | var creditCardNumber = faker.Finance.CreditCardNumber(); // 信用卡號 |
| 111 | var creditCardCvv = faker.Finance.CreditCardCvv(); // CVV |
| 112 | var account = faker.Finance.Account(); // 帳戶號碼 |
| 113 | var amount = faker.Finance.Amount(100, 10000, 2); // 金額 |
| 114 | var currency = faker.Finance.Currency(); // 貨幣 |
| 115 | var iban = faker.Finance.Iban(); // IBAN |
| 116 | var bic = faker.Finance.Bic(); // BIC/SWIFT |
| 117 | ``` |
| 118 | |
| 119 | #### 時間資訊 (Date DataSet) |
| 120 | |
| 121 | ```csharp |
| 122 | var pastDate = faker.Date.Past(); // 過去日期 |
| 123 | var futureDate = faker.Date.Future(); // 未來日期 |
| 124 | var recentDate = faker.Date.Recent(); // 最近日期 |
| 125 | var soonDate = faker.Date.Soon(); // 即將到來的日期 |
| 126 | var between = faker.Date.Between(start, end); // 範圍內日期 |
| 127 | var weekday = faker.Date.Weekday(); // 星期幾 |
| 128 | ``` |
| 129 | |
| 130 | #### 隨機資料 (Random DataSet) |
| 131 | |
| 132 | ```csharp |
| 133 | var randomInt = faker.Random.Int(1, 100); // 整數 |
| 134 | var randomDecimal = faker.Random.Decimal(0, 1000); // 小數 |
| 135 | var randomBool = faker.Random.Bool(); // 布林 |
| 136 | var randomGuid = faker.Random.Guid(); // GUID |
| 137 | var randomEnum = faker.Random.Enum<DayOfWeek>(); // 隨機列舉 |
| 138 | var randomElement = faker.Random.ArrayElement(array); // 陣列隨機元素 |
| 139 | var shuffled = faker.Random.Shuffle(collection); // 洗牌 |