【awesome-dotnet-core-learning】(3)-Bogus-假数据生成器

简介

Bogus一个简单而强大的假数据生成器,用于C#,F#和VB.NET.从著名的faker.js移植过来.

在测试或者需要一些虚拟的数据时,Bogus就可以派上用场了.这是一个移植自faker.js的一个.NET的库,帮助你快速生成看起来有意义的假数据.该项目已经发展很长时间了,在很多有名的项目中都有使用.

特点

简单而又强大的数据生成
内置多种假数据集(用户名,公司名,邮箱地址,地址等)
假数据支持本地化(如中文,日文,韩文等)
多种API语法:流式,非流式
庞大而活跃的社区

快速上手

以下示例演示了用Bogus生成一个假的用户信息例子.该用户包含以下属性:

名字
年龄
性别
公司
电话

创建一个.NET Core的命令行应用程序(详细步骤略)

使用Nuget安装Bogus:

Install-Package Bogus

为了输出生成的用户的信息,我们再安装著名的Json.Net:

Install-Package Newtonsoft.Json

Program.cs中,我们先创建User的类定义:

class User
{
    /// <summary>
    /// 名字
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// 年龄
    /// </summary>
    public int Age { get; set; }

    /// <summary>
    /// 性别
    /// </summary>
    /// <remarks>这里使用Bogus已经定义好的性别枚举类型</remarks>
    public Name.Gender Gender { get; set; }

    /// <summary>
    /// 公司
    /// </summary>
    public string Company { get; set; }

    /// <summary>
    /// 电话
    /// </summary>
    public string Phone { get; set; }
}

Main方法中,我们使用Bogus提供的流式API为User定义生成规则:

// 用户数据生成规则
var fakerPerson = new Faker<User>("zh_CN")                                      // 使用中文数据
        .RuleFor(p => p.Name, f => f.Name.FullName())                           // 随机汉字名
        .RuleFor(p => p.Age, f => f.Random.Number(1, 100))                      // 随机年龄(1-100岁)
        .RuleFor(p => p.Gender, f => f.PickRandom<Name.Gender>())               // 随机性别
        .RuleFor(p => p.Company, p => p.Company.CompanyName())                  // 随机公司名称
        .RuleFor(p => p.Phone, p => p.Phone.PhoneNumber("1##########"))         // 随机手机号
    ;

可以看到,Bogus内置了多种数据集,如姓名,公司和电话等,可方便的生成各种类型的假数据.更多的数据集可查阅文档Bogus API Support

生成数据

// 生成测试用户
var person = fakerPerson.Generate();

使用Json.Net输出数据

// 输出测试用户数据
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);

输出结果:

{
    "Name": "谢 擎宇",
    "Age": 39,
    "Gender": 0,
    "Company": "展鹏, 智宸 and 思",
    "Phone": "13691393533"
}

类似库

MisterJames/GenFu