Генерация тестовых данных на C#
Для генерации данных я использую библиотеку Bogus. Начнем с примеров:
using Bogus; using Bogus.DataSets; ... var faker = new Faker(); Console.WriteLine(faker.Company.CompanyName()); //Keebler LLC Console.WriteLine(faker.Name.FullName(Name.Gender.Male)); //Werner Rath Console.WriteLine(faker.Image.Animals()); //http://lorempixel.com/640/480 Console.WriteLine(faker.Internet.Avatar()); //https://s3.amazonaws.com/uifaces/faces/twitter/rehatkathuria/128.jpg
Методы генерации сгруппированы по датасетам. Bogus умеет генерировать следующие данные:
Address — почтовый индекс, улица, страна, штат, широта и долгота и т.д.
Commerce — название продукта, материал, цвет, цена и т.д.
Company — название компании, девиз и т.д.
Database — имя колонки, тип колонки, движок таблицы и т.д.
Date — множество методов для генерации дат по различным условиям
Finance — генерация валидных номеров счетов, карт, кошельков криптовалют и т.д.
Hacker — генерация существительных, прилагательных, глаголов и т.д.
Images — генерация ссылок на картинки с различными тематиками
Internet — генерация урлов, емейлов, IP адресов
Lorem — куски текста, предложения, абзацы
Name — части имени и должности
PhoneNumbers — номера телефонов
Rant — отзывы на товар
System — имена файлов, пути к директориям
Локализация тестовых данных
При создании генератора ему можно указать локаль
var faker = new Faker("ru"); Console.WriteLine(faker.Name.FullName(Name.Gender.Male)); //Игнатий Савельев
Поддерживается большое количество локалей, но для некоторых локалей некоторые датасеты недоступны.
Заполнение свойств объектов
Для заполнения свойств моделей можно использовать генераторы.
Создаем класс тестовой модели
public class TestUser { public string Name { get; set; } public int Age { get; set; } public string Login { get; set; } }
Теперь создаем соответствующий генератор и генерируем экземпляр нашего класса
var generator = new Faker<TestUser>() .StrictMode(true) .RuleFor(x => x.Name, f => f.Name.FirstName()) .RuleFor(x => x.Age, f => f.Random.Int(25, 50)) .RuleFor(x => x.Login, f => f.Person.UserName); var testUser = generator.Generate(); Console.WriteLine(testUser.Name); //Jamar Console.WriteLine(testUser.Age); //30 Console.WriteLine(testUser.Login); //Mabel.Luettgen13
Вызов .StrictMode(true) означает, что для всех свойств класса обязательно наличие правила.