我想用随机数据填充我的对象(用于测试目的),是否有一个库可以做到这一点?
某种反射方法,它将遍历对象图并初始化原始属性,如(string,int,DateTime等)(但深入的方式,包括集合,子对象等)
Bri*_*vez 42
Bogus是一个简单而健全的C#和.NET假数据生成器.Faker.js的 AC#port,受FluentValidation语法糖的启发.支持.NET Core.
建立
public enum Gender
{
   Male,
   Female
}
var userIds = 0;
var testUsers = new Faker<User>()
    //Optional: Call for objects that have complex initialization
    .CustomInstantiator(f => new User(userIds++, f.Random.Replace("###-##-####")))
    //Basic rules using built-in generators
    .RuleFor(u => u.FirstName, f => f.Name.FirstName())
    .RuleFor(u => u.LastName, f => f.Name.LastName())
    .RuleFor(u => u.Avatar, f => f.Internet.Avatar())
    .RuleFor(u => u.UserName, (f, u) => f.Internet.UserName(u.FirstName, u.LastName))
    .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName))
    //Use an enum outside scope.
    .RuleFor(u => u.Gender, f => f.PickRandom<Gender>())
    //Use a method outside scope.
    .RuleFor(u => u.CartId, f => Guid.NewGuid());
生成
var user = testUsers.Generate();
Console.WriteLine(user.DumpAsJson());
/* OUTPUT:
{
  "Id": 0,
  "FirstName": "Audrey",
  "LastName": "Spencer",
  "FullName": "Audrey Spencer",
  "UserName": "Audrey_Spencer72",
  "Email": "Audrey82@gmail.com",
  "Avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/itstotallyamy/128.jpg",
  "Gender": 0,
  "CartId": "863f9462-5b88-471f-b833-991d68db8c93", ....
没有流畅的语法
  public void Without_Fluent_Syntax()
  {
      var random = new Bogus.Randomizer();
      var lorem = new Bogus.DataSets.Lorem();
      var o = new Order()
          {
              OrderId = random.Number(1, 100),
              Item = lorem.Sentence(),
              Quantity = random.Number(1, 10)
          };
      o.Dump();
  }
  /* OUTPUT:
  {
    "OrderId": 61,
    "Item": "vel est ipsa",
    "Quantity": 7
  } */
Yuc*_*uck 26
NBuilder是一个非常好的用于生成数据的流畅API库.它使用您定义的规则,而不是"随机"本身.但是,您可以将输入随机化到API,以满足您的需求.
由于这仍然得到一些关注,我认为值得一提的是该项目现在也可以通过NuGet(https://www.nuget.org/packages/NBuilder/)获得,尽管它自2011年以来一直没有被修改过.
Max*_*eev 13
我尝试过AutoFixture(https://github.com/AutoFixture/AutoFixture),它对我很有用.它可以在一行代码中轻松生成具有深层次子层次的对象.
我最近一直在研究一个与你所描述的完全相同的东西(也许它之前已经完成过,但这似乎是一个有趣的项目).它仍在进行中,但我认为它捕获了您提到的所有功能.你可以在这里找到Nuget包:
https://www.nuget.org/packages/randomtestvalues
这里的存储库:https://github.com/RasicN/random-test-values
我希望你喜欢它.
示例代码:
var randomMyClass = RandomValue.Object<MyClass>();
| 归档时间: | 
 | 
| 查看次数: | 40589 次 | 
| 最近记录: |