如何在C#中使用Bogus去创建模拟数据


本文摘自PHP中文网,作者little bottle,侵删。

Bogus, 一个基于C#的简单数据生成器。使用Bogus生成模拟数据, 你只需要定义规则并生成数据即可,就是这么简单。而且Bogus可以生成固定数据或者变化数据。这样一旦你拿到了这些数据,你就可以把它们序列化成你想要的格式: json, xml,数据库或者文本文件。

生成模拟数据

为了生成模拟数据,我们首先需要针对模拟数据创建对应的实体类。这里我们可以创建一个命令行程序,并添加一下两个类。

1

2

3

4

5

6

7

8

9

10

11

12

13

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<Order> Orders { get; set; }

}

1

2

3

4

5

6

7

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

相关教程:C#视频教程

下面我们就可以来添加一个仓储类来获取模拟数据了。这里我们添加一个SampleCustomerRepository类,并加入以下方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public IEnumerable<Customer> GetCustomers()

{

    Randomizer.Seed = new Random(123456);

    var ordergenerator = new Faker<Order>()

        .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<Customer>()

        .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方法中加入以下代码

1

2

3

4

5

6

7

static void Main(string[] args)

{

    var repository = new SampleCustomerRepository();

    var customers = repository.GetCustomers();

    Console.WriteLine(JsonConvert.SerializeObject(customers,

        Formatting.Indented));

}

这里我们将模拟数据转换成了Json字符串,所以这里你需要添加对Newtonsoft.Json库的引用。当你运行程序之后,你会得要以下结果。

如上所见,程序生成了一个顾客的数据集,并附带了每个顾客的所有订单信息。

以上就是如何在C#中使用Bogus去创建模拟数据的详细内容!

相关阅读 >>

c# 获取随机字符串实现方法

c#执行原理深入解析(图文)

c#中二分法查找的入门(代码介绍)

c# 7.0 语言新特性

c#教程】c# 枚举(enum)

c#-json详解

c#从枚举值获取对应文本的图文代码详解

c# clickonce部署报错解决方法

c#获取本机ip搜集整理7种方法的示例代码分享

c#中winform制作异形窗体与控件的实现方法

更多相关阅读请进入《c》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...