Реалистичные Фейковые Данные с Помощью Bogus. Начало
Во вчерашнем посте я упомянул библиотеку Bogus для генерации случайных данных. Сегодня рассмотрим её поподробнее.
Иногда нужно поэкспериментировать с некоторыми функциями или создать демо проект, не создавая при этом реальный экземпляр БД. Также хотелось бы использовать более-менее реалистичные данные, а не «test1», 123 и т. д.
Bogus — популярная библиотека для генерации реалистичных данных для тестов. Она позволяет выбрать категорию фиктивных данных, которая лучше всего соответствует вашим потребностям.
Вы можете определить так называемые «фейкеры», целью которых является генерация фиктивных экземпляров классов путем автоматического заполнения их полей. Вот простой пример. Пусть у нас есть POCO-класс Book:
public class Book
{
public Guid Id { get; set; }
public string Title { get; set; }
public int Pages { get; set; }
public Genre[] Genres { get; set; }
public DateOnly PublicationDate { get; set; }
public string Author { get; set; }
}
public enum Genre
{
Thriller, Fantasy, Romance, Biography
}
И нам необходимо создать коллекцию книг. Для начала создадим:
Faker<Book> bookFaker = new Faker<Book>();
Мы можем добавить один или несколько методов RuleFor для создания правил, используемых для генерации каждого свойства. Самый простой подход — использовать перегрузку, где первый параметр — это функция, указывающая на заполняемое свойство, а второй — функция, которая вызывает методы, предоставляемые Bogus, для создания фиктивных данных. В виде псевдокода это выглядит так:
faker.RuleFor(
sm => sm.SomeProperty,
f => f.DataGenerator.Generate());
Другой вариант – использовать строковое имя свойства:
faker.RuleFor(
"SomeProperty",
f => f.DataGenerator.Generate());
Также можно определить генератор для определённого типа данных, указав, например, что «каждый раз, когда надо создать данные для этого типа, используй этот генератор»:
bookFaker.RuleForType(
typeof(DateOnly),
f => f.Date.PastDateOnly());
Далее рассмотрим генерацию данных для основных типов.
Продолжение следует…
Источник: https://www.code4it.dev/blog/seed-inmemory-entityframework-bogus/