C# 使用Bogus创建模拟数据
很多时候测试方法的时候需要创建一些测试数据,平时我都是自己手写的,
今天发现了一个可以创建模拟数据的轮子Bogus,下面看看怎么使用的
首先引用Nuget包
测试代码在这里,更多用法可以看Git的案例
using Bogus; using Bogus.DataSets; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static Bogus.DataSets.Name; namespace BogusTest { public enum Gender { Male, Female } public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public Gender Gender { get; set; } public Sect Sect { get; set; } public override string ToString() { return $"{Id} {Name} {Age} {Gender} {Sect.Name}"; } } public class Sect : IEquatable<Sect> { public string Address { get; set; } public string Name { get; set; } public DateTime Create { get; set; } public string Skill { get; set; } public bool Equals(Sect other) { return other.Name == Name; } public override string ToString() { return $"{Name} {Address} {Skill} {Create.ToString("yyyy:MM")}"; } public override bool Equals(object obj) { if (obj is Sect sect) { return sect.Equals(this); } return false; } public override int GetHashCode() { return Name.GetHashCode(); } } internal class Program { private static void Main(string[] args) { Randomizer.Seed = new Random(123); //门派信息 var sectGroups = new List<(string Name, string Skill, string Address, DateTime Create)>() { ("华山派","华山剑法","华山",new DateTime(1123,6,15)), ("古墓派","玉女剑法","古墓",new DateTime(1206,7,25)), ("少林派","易筋经","嵩山",new DateTime(1110,2,14)), ("丐帮","打狗棒法","无",new DateTime(1230,1,21)), ("武当派","太极剑","武当山",new DateTime(1005,2,15)), ("逍遥派","北冥神功","凌波洞",new DateTime(1000,3,12)), ("日月神教","葵花宝典","黑木崖",new DateTime(1109,4,11)), }; var sects = new Faker<Sect>() .CustomInstantiator(f => { var group = f.PickRandom(sectGroups); var s = new Sect(); s.Name = group.Name; s.Address = group.Address; s.Skill = group.Skill; s.Create = group.Create; return s; })//自定义复杂类的生成 .Generate(15); sects.ForEach(s => Console.WriteLine($"{s}")); Console.WriteLine("======================="); var person = new Faker<Person>() .StrictMode(true)//需要为所有的属性设定规则 .RuleFor(o => o.Id, f => f.Random.Number(0, 10000))//设置Id .RuleFor(o => o.Name, (f, o) => f.Name.FirstName())//使用Bogus自带的名称 .RuleFor(o => o.Gender, f => f.PickRandom<Gender>())//从枚举中随机选择 .RuleFor(o => o.Age, f => f.Random.Number(18, 54))//设定年龄 .RuleFor(o => o.Sect, f => f.PickRandom(sects))//从集合中随机选择 .Generate(50); person.ForEach(p => Console.WriteLine($"{p}")); } } }