Конфигурация AutoBogus и фиктивный детерминизм - PullRequest
0 голосов
/ 05 февраля 2020

При использовании конфигураций компоновщика AutoBogus с методами Create или Generate я не могу найти способ, которым я могу предоставить детерминированный c способ заполнения случайных чисел. 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())
            );

Я что-то упустил или просто недоступен на этом уровне?


В качестве обходного пути у моего класса переопределения есть только метод stati c для применяемых Правил, который применим как в переопределении, так и при создании экземпляра 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();
        }

    }
...