如何在C#中生成带有Bogus库的字符串列表?

时间:2016-11-26 17:11:55

标签: c#

我使用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 ???

任何人都可以指导我如何在虚假中生成预定义的faker列表?

3 个答案:

答案 0 :(得分:6)

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

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

该方法需要IEnumerable,这意味着您可以创建数组或List<string>来保存预定义数据。您可以将它与集合初始值设定项一起使用,以生成如下所示的电话列表:

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中找到更多信息。

答案 1 :(得分: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; }
}

Results using .Make in Bogus

希望有所帮助!

答案 2 :(得分:0)

这个怎么样

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