Как генерировать валидные данные?



Активные читатели моего канала могут подумать, что сейчас будет очередной пост про какую-нибудь кастомизацию AutoFixture, ведь все знают, как библиотека генерирует строки и числа.



А вот и нет! В сегодняшнем разговоре о генерации данных ключевое слово валидные.



Ответ на вопрос в заголовке: Bogus.



Да, для C# существует не один генератор данных.

Но разница проявляется как в назначении, так и в устройстве.



AutoFixture - это скорее некоторое подобие DI контейнера с CQRS архитектурой.

Bogus - инструмент, больше похожий на FluentValudation.



Для каждой модельки создаётся специальный генератор.

В нём с помощью fluent interface api всем полям прописываются правила по заполнению значений.



public class OrderFaker : Faker<Order>

{

public OrderFaker()

{

RuleFor(o => o.OrderId, f => f.Guid.NewGuid());

RuleFor(o => o.Item, f => f.Lorem.Sentence());

RuleFor(o => o.Quantity, f => f.Random.Number(1, 10));

}

}



var orderFaker = new OrderFaker();

var order = orderFaker.Generate();



Таким образом, данные получаются осмысленными.

В арсенале богуса есть адреса, имена, различные локали, схемы генерации, расширяемость и многое другое.