ZetCode

C# Bogus

最后修改于 2023 年 7 月 5 日

在本文中,我们将展示如何使用 Bogus 库在 C# 中生成假数据。

Bogus 是一个简单的 .NET 假数据生成器。 它受到 faker.js 的启发。

假数据在构建和测试我们的应用程序时非常有用。

我们可以使用经典的、过程式的或流畅的语法来生成假数据。

$ dotnet add package Bogus

在一个项目中,我们添加 Bogus 包。

C# Bogus 简单示例

以下是一个生成假数据的简单示例。

Program.cs
using Bogus;

var occupations = new string[] { "gardener", "teacher", "writer", "programmer" };
var faker = new Faker<User>()
   .RuleFor(u => u.Name, f => f.Name.FullName())
   .RuleFor(u => u.Occupation, f => f.PickRandom(occupations));


var res = faker.Generate(5);
Console.WriteLine(string.Join("\n", res));

public class User
{
    public string? Name;
    public string? Occupation;

    public override string ToString()
    {
        return $"{Name} {Occupation}";
    }
}

该程序生成假的用戶数据。

var occupations = new string[] { "gardener", "teacher", "writer", "programmer" };
var faker = new Faker<User>()
    .RuleFor(u => u.Name, f => f.Name.FullName())
    .RuleFor(u => u.Occupation, f => f.PickRandom(occupations));

假数据是使用定义的规则生成的。 使用流畅的语法,我们生成具有 faker 全名和随机职业的用戶,这些职业是从给定的数组中选择的。

var res = faker.Generate(5);

我们生成五个假用户。

public class User
{
    public string? Name;
    public string? Occupation;

    public override string ToString()
    {
        return $"{Name} {Occupation}";
    }
}

我们使用两个属性NameOccupation 定义 User 类型。

$ dotnet run
Donny Torphy gardener
Ansel Hauck teacher
Edyth Friesen programmer
Constantin Howe programmer
Dayana Gorczany teacher

C# Bogus 经典语法

我们可以使用过程语法生成假数据。

Program.cs
using Bogus;

var faker = new Faker();

var fname = faker.Person.FirstName;
var lname = faker.Person.LastName;
var email = faker.Person.Email;

Console.WriteLine($"{fname} {lname} {email}");

该程序为一个人物创建假数据,包括名字、姓氏和电子邮件。

$ dotnet run
Connie Trantow Connie14@hotmail.com

C# Bogus 国际化数据

我们可以使用各种语言创建数据。

Program.cs
using Bogus;

var fakerSk = new Faker("sk");

var fname = fakerSk.Person.FirstName;
var lname = fakerSk.Person.LastName;
var email = fakerSk.Person.Email;

Console.WriteLine($"{fname} {lname} {email}");

var fakerRu = new Faker("ru");

var fname2 = fakerRu.Person.FirstName;
var lname2 = fakerRu.Person.LastName;
var email2 = fakerRu.Person.Email;

Console.WriteLine($"{fname2} {lname2} {email2}");

该程序以斯洛伐克语和俄语创建假数据。

var fakerSk = new Faker("sk");

该区域设置传递给 Faker 的构造函数。

$ dotnet run
Matej Farkašovský Matej48@gmail.com
Валентин Кузьмин Valentin_Kuzmin39@gmail.com

C# Bogus 按类型生成假数据

我们可以按类型生成假数据。

Program.cs
using Bogus;

var faker = new Faker<Item>()
   .RuleForType(typeof(string), f => f.Lorem.Word())
   .RuleForType(typeof(int), f => int.MaxValue)
   .RuleFor(u => u.Weight, f => f.Random.Double(100, 200));

var res = faker.Generate(3);
Console.WriteLine(string.Join("\n", res));

public class Item
{
    public string? Name;
    public int Quantity;
    public double Weight;

    public override string ToString()
    {
        return $"{Name} {Quantity} {Weight}";
    }
}

在该程序中,我们为字符串、整数和双精度浮点数生成假数据。

var faker = new Faker<Item>()
    .RuleForType(typeof(string), f => f.Lorem.Word())
    .RuleForType(typeof(int), f => int.MaxValue)
    .RuleFor(u => u.Weight, f => f.Random.Double(100, 200));

这些规则基于 Item 类的属性类型。

$ dotnet run
maxime 2147483647 199.6262336436771
dolore 2147483647 189.21804805485243
tempora 2147483647 111.86314197682654

C# Bogus 伪造日期

通过 Date 属性,我们可以创建假日期。

Program.cs
using Bogus;

var now = DateTime.Now;
Console.WriteLine($"{now}");

var faker = new Faker();
Console.WriteLine(faker.Date.Future(20));
Console.WriteLine(faker.Date.Past(50));
Console.WriteLine(faker.Date.Between(new DateTime(2022, 1, 1),
    new DateTime(2025, 1, 1)));

在该示例中,我们在未来、过去以及给定的范围内创建假的日期时间值。

Console.WriteLine(faker.Date.Future(20));

在这里,我们创建一个最长为未来 20 年的假日期时间。

Console.WriteLine(faker.Date.Past(50));

我们创建一个最长可追溯到 50 年前的日期时间值。

Console.WriteLine(faker.Date.Between(new DateTime(2022, 1, 1),
    new DateTime(2025, 1, 1)));

此行在指定的两个日期时间之间创建一个日期时间值。

$ dotnet run
9/8/2022 5:17:07 PM
1/16/2027 6:56:03 PM
1/29/1979 8:21:46 AM
1/12/2023 6:54:39 PM`

来源

Bogus Github 页面

在本文中,我们使用 Bogus 库在 C# 中生成了假数据。

作者

我叫 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程