Конфигурация AutoBogus и фиктивный детерминизм
При использовании конфигураций построителя AutoBogus с методами Create или Generate я не могу найти способ предоставить детерминированный способ засева случайным образом. UseSeed недоступен.
Например:
var orderFaker = AutoFaker.Create(builder => builder.WithOverride(new OrderOverride()));
orderFaker
// .UseSeed(<int>) is not available on orderFaker
.Generate(5);
По аналогии,
List<Order> sut = AutoFaker.Generate<Order>(5,
builder => builder.WithOverride(new OrderOverride())
);
Я чего-то упускаю или это просто недоступно на этом уровне?
В качестве обходного пути мой класс переопределения просто имеет статический метод для применяемых правил, что делает его применимым в переопределении, а также при создании экземпляра AutoFaker<Order>
. Кажется, это работает, но просто интересно, есть ли способ лучше...
Faker<Order> orderFaker = new AutoFaker<Order>().Rules(
OrderOverride.OrderGenerator);
List<Order> actual = orderFaker
// https://github.com/bchavez/Bogus/tree/cc2f894e46be08e3a1521f31b464017666f4f8c7#determinism
// UseSeed at the faker level ensures consistent output
.UseSeed(1338)
.Generate(5)
.ToList();
public class OrderOverride : AutoGeneratorOverride
{
public override bool CanOverride(AutoGenerateContext context)
{
return context.GenerateType == typeof(Order);
}
public override void Generate(AutoGenerateOverrideContext context)
{
var o = context.Instance as Order;
var f = context.Faker;
OrderGenerator(f, o);
}
public static void OrderGenerator(Faker f, Order o)
{
o.LineItems = new AutoFaker<OrderLineItem>().GenerateBetween(2, 5);
o.Notes = f.Lorem.Text();
}
}