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
相关教程:c#视频教程
下面我们就可以来添加一个仓储类来获取模拟数据了。这里我们添加一个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#中使用bogus去创建模拟数据的详细内容。