原文:CREATING SAMPLE DATA FOR C#[1]

作者: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库的引用。当你运行程序之后,你会得要以下结果。

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

References

[1] CREATING SAMPLE DATA FOR C#: https://blogs.msmvps.com/bsonnino/2019/04/24/creating-sample-data-for-c/

C#中使用Bogus创建模拟数据相关推荐

  1. 使用建造者模式创建模拟数据

    前言 在写测试用例时,我们经常需要创建模拟数据,在C#中常用的方式是使用nuget包Bogus. Bogus可以按照一定规则生成随机数据,示例代码如下: public class User {publ ...

  2. 蜗牛爱课- iOS中plist的创建,数据写入与读取

    iOS中plist的创建,数据写入与读取功能创建一个test.plist文件 -(void)triggerStorage {     NSArray *paths=NSSearchPathForDir ...

  3. mock模拟的数据能增删改查吗_如何在Vue中使用Mockjs模拟数据的增删查改

    之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...

  4. 在vue中使用Mock模拟数据

    Q:为什么进行模拟数据? A:在做开发时,后端程序没有配齐,前端人员在做vue开发时,需要自己先模拟接口,模拟数据,等到后端数据配齐,提供好接口后,将项目中的接口换一下即可 一.本地加载请求静态jso ...

  5. KEPServerEX 6 模拟数据(OPCUA 通道创建连接)

    1. 首先进入界面 2. "连接性" 点击鼠标右键 "新建通道" 3. 选择通道类型为 Simulator ,点击下一步 4. 输入通道的名称(自己起) 5. ...

  6. 基于androidx的快速开发框架_Vue企业级优雅实战07框架开发03封装基于MockJS的模拟数据...

    预览本文的实现效果: # giteegit clone git@gitee.com:cloudyly/dscloudy-admin-single.git# githubgit clone git@gi ...

  7. Thingworx - 创建一个数据表的增删改查操作

    创建一个数据形状: 创建数据形态(datashapes),点击选项右侧"+"号或者右侧界面"新建"按钮 在创建页面输入名称,也可以输入说明等,如果有项目等条件, ...

  8. 前端开发中使用mock模拟数据

    使用mock进行模拟数据开发 第一步:npm i mockjs -D 这里必须加-D,因为我们只是开发环境使用 第二步:在 main.js 文件中引入mock:import '@/mock' 第三步: ...

  9. Python 创建商店营业额模拟数据并对其分析

    参考自Python+pandas+matplotlib数据分析与可视化案例(附源码) 学校期末项目 创建商店营业额模拟数据并对其分析 一.创建数据 (1)添加"日期,商品名称,销售数量,商品 ...

最新文章

  1. 使用Delphi自带的TDockTabSet组件实现停靠功能(Jeremy North)
  2. 【雷达书籍分享】RADAR SYSTEMS ANALYSIS AND DESIGN USING MATLAB
  3. 我们无法在你选择的位置安装Windows。0x80300002
  4. Redis基数统计之HyperLogLog小内存大用处
  5. api数据加密的定义_API 设计基础规范
  6. 关于地理国情监测(国家测绘局、地理信息系统协会改名及国家级地理信息产业园奠基的风生水起)...
  7. 第2章 python入门
  8. 利用TP-Link+花生壳建立属于自己的网站
  9. vijos 1602
  10. 服务器lsass系统错误,电脑开机提示lsass.exe系统错误无法进入系统的解决方法
  11. Floating point exception
  12. Riverbed发布业界最全面的数字体验管理解决方案
  13. 微信计步器怎么不计步_微信运动不计步数是怎么回事?
  14. VBA中数组72变(随心所欲复制)
  15. HDU-2017 多校训练赛9-1005-FFF at Valentine
  16. Python使用逻辑回归提示FutureWarning: Default solver will be changed to ‘lbfgs‘ in 0.22. Specify a solver to
  17. jvm调优的简单手段---都是实际工作用到的。
  18. 红黑树--(高清无码图+代码)演示
  19. 天瑞地安科技集团为你解读2017年平面设计大趋势
  20. java体温_java实现体温单实例-eclipse-java工程

热门文章

  1. linux qt编译器路径,QT学习之一:Linux下安装QT之版本qt
  2. html边框图片出不来怎么回事,IOS页面边框是显示不出来怎么办?border-image实例教程...
  3. 大数据已死!从业10年老哥爆文抨击:这套唬不住客户了
  4. jmeter随机数生成
  5. Xilinx 7系列FPGA数据手册:概述--中文版
  6. 用jupyter book导入excel数据做最小二乘多项式及任意非线性函数拟合
  7. 阿里集团发布“码上淘”战略,青岛啤酒尝头啖汤
  8. PDF文件怎么编辑?用迅读PDF大师,PDF编辑如此简单
  9. C语言超链接的使用方法,c语言课程第五讲超链接.ppt
  10. 火狐浏览器默认安装c盘