【问题标题】:How generate list of string with Bogus library in C#?如何在 C# 中使用 Bogus 库生成字符串列表?
【发布时间】:2017-04-10 19:01:41
【问题描述】:

我使用Bogus 库来生成测试数据。

例如我有一个班级:

public class Person
{
   public int Id {get; set;}
   public List<string> Phones {get; set;} // PROBLEM !!!
}

var Ids = 0;
var test = new Faker<Person>()
    .RuleFor(p => p.Id, f => Ids ++)
    .RuleFor(p => p.Phones , f => /*HOW ?????*/) // How can I return random list of PhoneNumbers ???

谁能指导我如何生成伪造的预定义伪造者列表?

【问题讨论】:

    标签: c#


    【解决方案1】:

    Bogus 库有一个辅助方法来选择集合的随机元素:

    public T PickRandom<T>(IEnumerable<T> items)
    

    该方法采用IEnumerable,这意味着您可以创建一个数组或List&lt;string&gt; 来保存您的预定义数据。您可以将它与集合初始化程序结合使用来生成您的电话列表,如下所示:

    var phones = new List<string> { "111-111-111", "222-222-222", "333-333-333" };
    
    var Ids = 0;
    var test = new Faker<Person>()
        .RuleFor(p => p.Id, f => Ids++)
        // generate 2 phones
        .RuleFor(p => p.Phones, f => new List<string> { f.PickRandom(phones), f.PickRandom(phones) });
    

    如果您想在列表中生成更多条目并且不希望初始化程序变大(或者您想以编程方式改变数量),您可以使用 Linq:

    // generate 8 phones
    .RuleFor(p => p.Phones, f => Enumerable.Range(1, 8).Select(x => f.PickRandom(phones)).ToList());
    
    // generate 1 to 5 phones
    .RuleFor(p => p.Phones, f => Enumerable.Range(1, f.Random.Int(1, 5)).Select(x => f.PickRandom(phones)).ToList());
    

    您可以在项目的 GitHub 页面上的 readme 中找到更多信息。

    【讨论】:

    • 这不再编译。
    【解决方案2】:

    您还可以使用f.Make() 方法生成事物列表。方法如下:

    void Main()
    {
      var Ids = 0;
      var test = new Faker<Person>()
          .RuleFor(p => p.Id, f => Ids++)
          .RuleFor(p => p.Phones, f => f.Make(3, () => f.Phone.PhoneNumber()));
    
          //If you want a variable number of phone numbers
          //in the list, replace 3 with f.Random.Number()
    
      test.Generate(5).Dump();
    }
    
    public class Person
    {
      public int Id { get; set; }
      public List<string> Phones { get; set; }
    }
    

    希望有帮助!

    【讨论】:

      【解决方案3】:

      这个呢

      .RuleFor(e => e.EventContacts, f => f.Make(f.Random.Number(), () => f.PickRandom(Contacts).Id))
      

      【讨论】:

        猜你喜欢
        • 2021-06-07
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 2021-09-11
        • 1970-01-01
        相关资源
        最近更新 更多