Я использую библиотеку 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#
12
NBM 26 Ноя 2016 в 20:11

2 ответа

Лучший ответ

В библиотеке 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());

Дополнительную информацию можно найти в readme на странице проекта на GitHub.

11
apk 27 Ноя 2016 в 13:24

Вы также можете использовать метод 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

Надеюсь, это поможет!

10
Brian Chavez 15 Май 2018 в 18:42