C#如何使用Bogus创建模拟数据示例代码

所属分类: 软件编程 / C#教程 阅读数: 119
收藏 0 赞 0 分享

原文:CREATING SAMPLE DATA FOR C#

作者:Bruno Sonnino

译文:C#中使用Bogus创建模拟数据

译者: Lamond Lu

背景

在我每次写技术类博文的时候,经常做的一件事就是创建模拟数据。在每篇博文中,为了解释某些概念,我需要创建许多模拟数据。这是一个我在实际中遇到的问题,因为我需要为我的程序找到一些合适的数据。有些时候,我会从数据库中找一些数据(Northwind和AdventureWorks都是我的好朋友^.^), 有些时候,我会使用一些现成的Json或者Xml数据,当然有时候我只能自己手动创建一些数据。

当然以上方案都不完美,也都不稳定,所以每次我都需要探索一些新方式来获取数据(对于学习来说这很好,但是维护起来确是一种灾难)。

最后我找到了Bogus, 一个基于C#的简单数据生成器。

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

生成模拟数据

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

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; }
}
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

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

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

static void Main(string[] args)
{
 var repository = new SampleCustomerRepository();
 var customers = repository.GetCustomers();
 Console.WriteLine(JsonConvert.SerializeObject(customers, 
  Formatting.Indented));
}

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

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多