Bogus для C# (.NET): полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Bogus и зачем он нужен?

Bogus — это мощная, простая и быстрая библиотека для генерации поддельных (тестовых) данных на языке C# (.NET). Она является прямым портом популярной JavaScript-библиотеки Faker.js. Основная цель Bogus — избавить разработчиков от ручного написания шаблонного кода для создания тестовых наборов данных.

Зачем это нужно? Представьте, что вы разрабатываете приложение, которое работает с пользователями, заказами, продуктами или любыми другими сущностями. Для тестирования функциональности (юнит-тесты, интеграционные тесты, нагрузочное тестирование) вам постоянно требуются данные: имена, адреса, email, номера телефонов, текст, числа, даты и т.д. Ручное создание 1000 объектов User с разными данными — это утомительно, долго и чревато ошибками. Bogus решает эту проблему в одну строку кода.

Ключевые преимущества Bogus:

  • Локализация: Поддержка десятков языков и региональных форматов (ru, en, de, fr, и т.д.).
  • Гибкость: Вы можете генерировать данные с учетом бизнес-правил (например, "цена должна быть больше 0 и меньше 1000").
  • Повторяемость: Используя seed (зерно), вы можете получать одинаковые наборы данных при каждом запуске — критически важно для воспроизводимых тестов.
  • Производительность: Bogus оптимизирован для генерации миллионов записей за секунды.
  • Типобезопасность: Работает с вашими собственными классами и интерфейсами, используя строгую типизацию C#.

Установка Bogus

Bogus распространяется как NuGet-пакет. Установить его можно несколькими способами:

1. Через .NET CLI (рекомендуется)

dotnet add package Bogus

2. Через Package Manager Console (Visual Studio)

Install-Package Bogus

3. Через интерфейс NuGet Package Manager в Visual Studio

Откройте "Manage NuGet Packages", найдите "Bogus" и нажмите "Install".

После установки добавьте using-директиву в ваш код:

using Bogus;

Быстрый старт: первый пример

Давайте сгенерируем простую коллекцию объектов Person с русскими именами и адресами.

using Bogus;

// 1. Создаем "правила" (Faker) для генерации данных
//    Указываем локаль "ru" для русских данных
var faker = new Faker("ru");

// 2. Генерируем 10 вымышленных персон
for (int i = 0; i < 10; i++)
{
    var person = new
    {
        Name = faker.Name.FullName(),    // Полное имя
        Email = faker.Internet.Email(),  // Email
        Phone = faker.Phone.PhoneNumber(), // Номер телефона
        City = faker.Address.City(),     // Город
        Age = faker.Random.Int(18, 80)   // Возраст от 18 до 80
    };

    Console.WriteLine($"{person.Name}, {person.Age} лет, {person.City}, {person.Email}, {person.Phone}");
}

// Пример вывода (будет меняться при каждом запуске):
// Иванов Иван Петрович, 34 лет, Москва, ivanov@example.com, +7 (495) 123-45-67
// Петрова Анна Сергеевна, 27 лет, Санкт-Петербург, petrova@test.ru, +7 (812) 987-65-43
// ...

Как это работает? new Faker("ru") создает главный объект-генератор. Его свойства Name, Internet, Phone, Address, Random — это встроенные "категории" (API), каждая из которых содержит десятки методов для генерации специфических данных.

Основные методы и функции Bogus

Bogus предоставляет огромное количество методов. Ниже приведены 10+ наиболее часто используемых категорий и их ключевые методы с подробными примерами.

1. Name — Генерация имен

Что делает: Генерирует имена, фамилии, отчества (для русской локали), полные имена, префиксы и суффиксы.

Параметры: Большинство методов не требуют параметров, но есть перегрузки для указания пола.

Пример:

var faker = new Faker("ru");

string firstName = faker.Name.FirstName();          // "Александр"
string lastName = faker.Name.LastName();            // "Кузнецов"
string fullName = faker.Name.FullName();            // "Кузнецов Александр Дмитриевич"
string fullNameMale = faker.Name.FullName(Bogus.DataSets.Name.Gender.Male); // Только мужские
string jobTitle = faker.Name.JobTitle();            // "Ведущий инженер-программист"

Console.WriteLine($"{fullName}, должность: {jobTitle}");

2. Internet — Генерация интернет-данных

Что делает: Создает email, URL, пароли, имена пользователей, домены, IP-адреса.

Параметры: Email() может принимать имя пользователя; Password() — длину.

Пример:

var faker = new Faker("en"); // Для email лучше использовать "en"

string email = faker.Internet.Email();              // "John_Doe82@hotmail.com"
string emailWithName = faker.Internet.Email("alice"); // "alice.Wuckert39@yahoo.com"
string userName = faker.Internet.UserName();        // "Bridgette.Hilpert"
string password = faker.Internet.Password(12);      // "aB3$kL9!xQ2p"
string url = faker.Internet.Url();                  // "https://www.clementine.biz"
string ip = faker.Internet.Ip();                    // "192.168.1.105"

Console.WriteLine($"Email: {email}, Password: {password}");

3. Phone — Генерация телефонных номеров

Что делает: Генерирует номера телефонов в формате, соответствующем локали.

Параметры: PhoneNumber() может принимать строку формата (например, "###-###-####").

Пример:

var faker = new Faker("ru");

string phone = faker.Phone.PhoneNumber();           // "+7 (921) 123-45-67"
string customPhone = faker.Phone.PhoneNumber("8-###-###-##-##"); // "8-921-123-45-67"

Console.WriteLine($"Телефон: {phone}, Кастомный: {customPhone}");

4. Address — Генерация адресов

Что делает: Создает полные адреса, города, улицы, почтовые индексы, страны, координаты (широта/долгота).

Параметры: Большинство методов не имеют параметров.

Пример:

var faker = new Faker("ru");

string city = faker.Address.City();                 // "Казань"
string street = faker.Address.StreetName();         // "ул. Ленина"
string fullAddress = faker.Address.FullAddress();   // "г. Казань, ул. Ленина, д. 15, кв. 42"
string zipCode = faker.Address.ZipCode();           // "420015"
double lat = faker.Address.Latitude();              // 55.7961
double lng = faker.Address.Longitude();             // 49.1064

Console.WriteLine($"Адрес: {fullAddress}, Координаты: {lat}, {lng}");

5. Date — Генерация дат и времени

Что делает: Генерирует случайные даты, даты в прошлом/будущем, временные метки.

Параметры: Past() принимает количество лет; Between() — начальную и конечную дату.

Пример:

var faker = new Faker();

DateTime recentDate = faker.Date.Recent(7);         // Дата за последние 7 дней
DateTime pastDate = faker.Date.Past(10);            // Дата в пределах 10 лет назад
DateTime futureDate = faker.Date.Future(5);         // Дата в пределах 5 лет вперед
DateTime between = faker.Date.Between(new DateTime(2020,1,1), new DateTime(2023,12,31));
DateTimeOffset offset = faker.Date.Soon();          // В ближайшие 30 дней

Console.WriteLine($"Прошлое: {pastDate:d}, Будущее: {futureDate:d}, Между: {between:d}");

6. Random — Генерация случайных чисел и элементов

Что делает: Базовый генератор случайных чисел, строк, выбор из списка, перемешивание.

Параметры: Зависят от метода.

Пример:

var faker = new Faker();

int number = faker.Random.Int(1, 100);              // Случайное целое от 1 до 100
double doubleNum = faker.Random.Double(10.5, 20.5); // Случайное double от 10.5 до 20.5
string hex = faker.Random.Hexadecimal(8);           // "A3F2B1C0"
string word = faker.Random.Word();                  // Случайное английское слово
string[] colors = { "Red", "Green", "Blue" };
string selected = faker.Random.ArrayElement(colors); // "Green"
var shuffled = faker.Random.Shuffle(colors.ToList()); // Перемешанный список

Console.WriteLine($"Число: {number}, Слово: {word}, Выбрано: {selected}");

7. Commerce — Генерация товарных данных

Что делает: Создает названия продуктов, цены, категории, цвета, отделы.

Параметры: Price() может принимать минимальную и максимальную цену.

Пример:

var faker = new Faker("en");

string product = faker.Commerce.ProductName();      // "Handcrafted Soft Chicken"
string category = faker.Commerce.Categories(1)[0];  // "Books"
decimal price = faker.Commerce.Price(10, 1000);     // 123.45m
string color = faker.Commerce.Color();              // "maroon"
string department = faker.Commerce.Department();    // "Electronics"

Console.WriteLine($"Товар: {product}, Цена: {price:C}, Категория: {category}");

8. Vehicle — Генерация данных об автомобилях

Что делает: Генерирует марки, модели, VIN-номера, типы топлива, производителей.

Параметры: Без параметров.

Пример:

var faker = new Faker("en");

string make = faker.Vehicle.Manufacturer();         // "Toyota"
string model = faker.Vehicle.Model();               // "Camry"
string vin = faker.Vehicle.Vin();                   // "1HGBH41JXMN109186"
string fuel = faker.Vehicle.Fuel();                 // "Gasoline"
int year = faker.Vehicle.Year();                    // 2022

Console.WriteLine($"Автомобиль: {make} {model}, VIN: {vin}, Год: {year}");

9. Lorem — Генерация текста

Что делает: Создает "рыбный" текст (Lorem Ipsum), слова, предложения, параграфы.

Параметры: Количество слов/предложений/параграфов.

Пример:

var faker = new Faker("en");

string word = faker.Lorem.Word();                   // "dolor"
string sentence = faker.Lorem.Sentence(5);          // "Lorem ipsum dolor sit amet."
string paragraph = faker.Lorem.Paragraph(3);        // 3 предложения
string                    

Рекомендаций